Hallo zusammen,
ich habe folgendes Problem:
In meiner Applikation werden in einer Funktion alle markierten Datensätze abgearbeitet und der Inhalt der Datensätze geändert. Die Anzeige der Datensätze ist mit einer WHERE-Klausel verbunden. Das heißt, ich bekomme in meinem DBGrid eine eingeschränkte Datenmenge angezeigt. Aus dieser Datenmenge markiere ich X Datensätze. Mit der aufzurufenden Funktion werden dann die Änderungen pro Datensatz getätigt. Das verläuft alles richtig.
Nach jedem abgearbeiteten Datensatz möchte ich eine Aktualisierung auf die Datenmenge ausführen, damit die Datenmenge dem Filter entsprechend richtig angezeigt wird. Hierbei habe ich ein Problem. Ich mache das folgendermaßen:
Delphi-Quellcode:
procedure Test;
var X, Y : Integer;
begin
...
X := myGrid.SelectedRows.Count;
Y := 0;
if X > 0 then
begin
repeat
mygrid.SelectedRows.Refresh;
MyDS.GotoBookmark(pointer(mygrid.SelectedRows.Items[Y]));
...
// macht irgendwas
...
// falls Bookmark verloren, die fehlenden Datensätze bis zum Tabellenende
MyDS.GotoBookmark(pointer(mygrid.SelectedRows.Items[Y]));
mygrid.SelectedRows.Refresh; // Liste aktualisieren
MyDS.Requery; // das habe ich eingefügt, um die Datenmenge zu aktualiseren; funktioniert auch
Y := Y + 1;
until Y > X-1;
end;
end;
So funktioniert es auch, aber wenn die repeat-Schleife wieder oben ankommt, dann kommt folgende Meldung bei [myGrid.SelectedRows.Refresh]:
EOleException: "Das Lesezeichen war ungültig"
und irgendwann zum Ende der markierten Datensätze kommt beim Bookmark "Listenindex überschreitet das Maximum", was auch klar ist warum.
Als Hinweis noch: Ich habe das ganze auch mit DAC-Komponenten mit einer MS
SQL Datenbank gemacht und dort verläuft es einwandfrei.
Hoffe die Infos reichen soweit aus.
Danke & Gruß, Moony