Toon posts:

[delphi] requery

Pagina: 1
Acties:

Verwijderd

Topicstarter
ik heb in mijn programma verschillende DBGrid's die query's weergeven, maar als ik een nieuwe record invoeg dan requeryed hij die query's niet, de oude gegevens blijven staan

ik heb al wat zitten kloten met .refresh, maar dat lijkt niet te werken, wat te doen :?

  • Coltrui
  • Registratie: Maart 2001
  • Niet online

Coltrui

iddqd

Refreshen gaat alleen bij tabellen omdat die (zouden moeten) geïndexeerd zijn. Probeer na je update/delete/whatever je query te closen en terug te openen. (= +- refresh)

suc6

Verwijderd

Topicstarter
dat werkt idd

THX m8

Verwijderd

Op maandag 24 september 2001 20:54 schreef peymora het volgende:
ik heb in mijn programma verschillende DBGrid's die query's weergeven, maar als ik een nieuwe record invoeg dan requeryed hij die query's niet, de oude gegevens blijven staan

ik heb al wat zitten kloten met .refresh, maar dat lijkt niet te werken, wat te doen :?
Ik ben geen liefhebber van DBGrids (of data aware controls, for that matter), en Refresh werkt denk ik alleen wanneer RequestLive van die queries aanstaat (en jep, daar heb ik ook een hekel aan :)).

Om die grids toch geupdate te krijgen, moet je denk ik 't volgende doen:
- even de keyvalue van 't record bewaren,
- DisableControls van de query aanroepen,
- Query closen en weer openen,
- Record met de bewaarde keyvalue weer opzoeken,
- EnableControls.

En wanneer je hier gewoonte van maakt in een client/server omgeving met niet al te kleine result sets, zul je na een tijdje door je werkgever ritueel worden gevierendeeld wegens het onnodig verspillen van bandbreedte en database resources... 8-)

  • Coltrui
  • Registratie: Maart 2001
  • Niet online

Coltrui

iddqd

Op maandag 24 september 2001 21:12 schreef peymora het volgende:
dat werkt idd
THX m8
You're welcome :Y)
Op maandag 24 september 2001 21:13 schreef Afterlife het volgende:

[..]
En wanneer je hier gewoonte van maakt in een client/server omgeving met niet al te kleine result sets, zul je na een tijdje door je werkgever ritueel worden gevierendeeld wegens het onnodig verspillen van bandbreedte en database resources... 8-)
Hey natuurlijk heb je gelijk, maar wat gebruik jij dan om de inhoud van je DB/Query weer te geven ad user?
(Ben nieuwsgierig omdat ik op't werk niets anders implementeer dan multi-user-delphi-applicaties.)

Verwijderd

Op maandag 24 september 2001 21:26 schreef Wezen het volgende:
Hey natuurlijk heb je gelijk, maar wat gebruik jij dan om de inhoud van je DB/Query weer te geven ad user?
(Ben nieuwsgierig omdat ik op't werk niets anders implementeer dan multi-user-delphi-applicaties.)
Voor de weergave een StringGrid als 't simpel kan, of een DrawGrid of TreeView als 't wat fancier moet. En in alle gevallen een object-structuur erachter die de gegevens bijhoudt en de grid/tree update.

En in multi-user situaties een eigen geschreven event broker waar iedere client zich bij aanmeldt en aangeeft wat z'n interessegebieden zijn. Op 't moment dat een willekeurige client een record update of insert, stuurt 'ie ook een berichtje naar die event broker (over TCP/IP, principe is echt heel simpel: "in tabel X is record met keyvalue Y ge-update").
Die broker stuurt dat vervolgens door aan de overige clients die geinteresseerd zijn in dat berichtje, en dan is 't aan de actieve objecten bij de client of ze iets met 't bericht doen of niet.

In de meeste gevallen zal zo'n client reageren met een 'select <velden die ik wil weten> from X where <key> = Y' om 1 bepaald record te updaten of toe te voegen, maar in sommige gevallen (bij inserts die een hoop impact op de hele object-structuur kunnen hebben) is een volledige refresh nodig.

Verwijderd

Topicstarter
Op maandag 24 september 2001 21:13 schreef Afterlife het volgende:

En wanneer je hier gewoonte van maakt in een client/server omgeving met niet al te kleine result sets, zul je na een tijdje door je werkgever ritueel worden gevierendeeld wegens het onnodig verspillen van bandbreedte en database resources... 8-)
Misschien is het nuttig om te weten dat dit een progje is dat op 1 enkele computer komt te draaien... (en gebackuped wordt op die 1e computer) ????

>:) >:)

Verwijderd

Op maandag 24 september 2001 22:19 schreef peymora het volgende:
Misschien is het nuttig om te weten dat dit een progje is dat op 1 enkele computer komt te draaien... (en gebackuped wordt op die 1e computer) ????
Niks mis mee, maar werd niet vermeld. Vandaar mijn toevoeging, just to be sure.

  • whoami
  • Registratie: December 2000
  • Laatst online: 11:46
Op maandag 24 september 2001 21:13 schreef Afterlife het volgende:

[..]

Ik ben geen liefhebber van DBGrids (of data aware controls, for that matter), en Refresh werkt denk ik alleen wanneer RequestLive van die queries aanstaat (en jep, daar heb ik ook een hekel aan :)).

Om die grids toch geupdate te krijgen, moet je denk ik 't volgende doen:
- even de keyvalue van 't record bewaren,
- DisableControls van de query aanroepen,
- Query closen en weer openen,
- Record met de bewaarde keyvalue weer opzoeken,
- EnableControls.

En wanneer je hier gewoonte van maakt in een client/server omgeving met niet al te kleine result sets, zul je na een tijdje door je werkgever ritueel worden gevierendeeld wegens het onnodig verspillen van bandbreedte en database resources... 8-)
Ik werk ook niet zo graag met die data-aware controls, maar ze zijn wel sneller in het weergeven van data dan als je zelf een TListView, TTreeview opvult.

https://fgheysels.github.io/


Verwijderd

Op dinsdag 25 september 2001 22:25 schreef whoami het volgende:
Ik werk ook niet zo graag met die data-aware controls, maar ze zijn wel sneller in het weergeven van data dan als je zelf een TListView, TTreeview opvult.
Bij grids maakt 't niet zoveel uit, omdat de cells toch op 't OnDrawCell event moeten worden getoond, data aware of niet.
En bij ListViews en TreeViews maakt 't enorm veel uit wanneer je gebruik maakt van BeginUpdate/EndUpdate. Dus iets als:
code:
1
2
3
4
5
6
7
8
with MyTreeView.Items do begin
  BeginUpdate;
  try
    // populate tree
  finally
    EndUpdate;
  end;
end;

Bij mij was dat in 1 geval voldoende om het 'populate tree' gedeelte terug te brengen van 80 seconden naar minder dan een seconde. Vanaf dat moment denk ik er niet meer aan om 't NIET te gebruiken... :)

edit:
.Items vergeten
Pagina: 1