DBGrid richtig refreshen
-
Hi,
ich will das meine DBGrid jede 3. sekunde neu eingelsen wird, und ggf. aktualisiert wird. Dazu habe ich einen 3sec Timer eingebaut.
1. Problem:
Das Flackern beim ständigen erneuern ist nicht sehr schön, könnte man das verhindern, bzw. nur vielleicht dann wenn sich die Datenbank wirklich geändert hat?ADOQuery1->Close(); ADOQuery1->SQL->Clear(); ADOQuery1->SQL->Add("SELECT Nr,GerichtGetraenk,Preis FROM speisekarte WHERE Typ =\"Getraenk\" "); ADOQuery1->Open();
2. Problem:
Wenn der benutzer eine zeile löschen will, muss er diese markieren, nach dem aktualisieren aber springt der Pfeil wieder in die erste Zeile... grrrSuche habe ich schon beansprucht, aber nichts für mein 1. Problem finden können.
Zum 2. Problem habe ich das hier gefunden:
int x = db->FieldByName("schluesselfeld")->AsInteger; db->Refresh(); if (!db->Locate("schluesselfeld", x, TLocateOptions() << loCaseInsensitive)) db->First();
aber den code verstehe ich nicht ganz... was zb soll in "schluesselfeld" rein?
3. Verständnisfrage:
Was bitte genau machtADOQuery1->Refresh();
?
Weil neu einlesen tut die Funktion ja nicht...Freu mich auf jede Antwort.
MfG Gustl
-
Gustl schrieb:
Zum 2. Problem habe ich das hier gefunden:
int x = db->FieldByName("schluesselfeld")->AsInteger; db->Refresh(); if (!db->Locate("schluesselfeld", x, TLocateOptions() << loCaseInsensitive)) db->First();
aber den code verstehe ich nicht ganz... was zb soll in "schluesselfeld" rein?
schluesselfeld ist eine der Spalten der Tabelle bzw. der Abfrage, in deinem Fall könnte dort sinnvollerweise "Nr" stehen
ADOQuery1->Refresh();
sollte eigentlich die Datenmenge aktualiseren, dies geht aber laut BCB-Hilfe nicht bei allen TDataSet-Nachkommen, eventuell ist die Verwendung von ADOQuery solch ein Fall; du kannst ja mal stattdessen ADOCommand und ADODataSet verwenden z.B.:
ADOCommand1->CommandText = "SELECT Nr,GerichtGetraenk,Preis FROM speisekarte WHERE Typ =\"Getraenk\""; ADODataSet1->Recordset = ADOCommand1->Execute();
das ADODataSet wird dann genau wie das Query verwendet
-
TADOQuery::Requery() ist vielleicht auch einen Blick wert.
Gruß KK
-
Danke euch beiden.
Mit Requery() funktioniert es einwandfrei und mein 2. Problem ist auch behoben.
MfG Gustl