Ein Problem plagt mich schon einige Jahre und zwar ist das die "Refresh" Funktion von ADOQueries (und ähnlichem). Diese ist ja eigentlich recht komfortabel, aktualisiert die Daten und stellt sicher, dass der Cursor an der gleichen Stelle bleibt. Bei 98% aller Kunden funktioniert dies auch einwandfrei, aber bei den restlichen 2% führt es zu minutemlangen "Laden" der Daten. Bei wenigen Kunden kommt sogar oft die Fehlermeldung "Verbindung zum Server verloren".
Wenn ich bei diesen Kunden den Aufruf von Refresh() durch Requery() ersetze oder einfach die Query schließe und wieder öffne, dann geht es sehr schnell (nur ein paar Millisekunden), es liegt also nicht an der Abfrage an sich. Das Problem von Requery() und neu öffnen ist allerdings, dass die Position des Cursors verloren geht. Nun hab ich auch schon getestet es über Requery() und danach einem GotoBookmark() Befehl zu lösen, aber eben dieser GotoBookmark() Effekt erzeugt wieder das gleiche Problem wie Refresh(), das eben minutenlang gerechnet wird.
Folglich blieb mir nur noch die Wahl zwischen: Cursor verlieren und in Kauf nehmen, dass es bei manchen Kunden ewig dauert oder gar nicht funktioniert, was beides sehr suboptimal ist. =/
Hierzu muss ich noch sagen, dass einige der Kunden, bei denen es schnell ist, deutlich größere Datenbanken haben, daran kann es also nicht liegen.
Habt ihr vielleicht noch eine Idee, wie man das Problem noch angehen könnte ohne die ganzen Programmstruktur zu ändern? Irgendeinen Index setzen (aber der Primärschlüssel hat ja sowieso einen Index und das GotoBookmark / Refresh sollte ja nichts anderes benutzen?) oder vielleicht eine Einstellung in den ADO-Komponenten ändern?
Wenn ich bei diesen Kunden den Aufruf von Refresh() durch Requery() ersetze oder einfach die Query schließe und wieder öffne, dann geht es sehr schnell (nur ein paar Millisekunden), es liegt also nicht an der Abfrage an sich. Das Problem von Requery() und neu öffnen ist allerdings, dass die Position des Cursors verloren geht. Nun hab ich auch schon getestet es über Requery() und danach einem GotoBookmark() Befehl zu lösen, aber eben dieser GotoBookmark() Effekt erzeugt wieder das gleiche Problem wie Refresh(), das eben minutenlang gerechnet wird.
Folglich blieb mir nur noch die Wahl zwischen: Cursor verlieren und in Kauf nehmen, dass es bei manchen Kunden ewig dauert oder gar nicht funktioniert, was beides sehr suboptimal ist. =/
Hierzu muss ich noch sagen, dass einige der Kunden, bei denen es schnell ist, deutlich größere Datenbanken haben, daran kann es also nicht liegen.
Habt ihr vielleicht noch eine Idee, wie man das Problem noch angehen könnte ohne die ganzen Programmstruktur zu ändern? Irgendeinen Index setzen (aber der Primärschlüssel hat ja sowieso einen Index und das GotoBookmark / Refresh sollte ja nichts anderes benutzen?) oder vielleicht eine Einstellung in den ADO-Komponenten ändern?
Comment