Entwickler-Ecke

Datenbanken - GotoBookmark-Fehler ...


Bart - Do 01.08.02 15:45
Titel: GotoBookmark-Fehler ...
Hallo,

ich habe ein Problem mit der Aktualisierung von Queries:

Ich würde gern ein Query aktualiseren, dabei aber den Cursor an seiner angestammten Stelle lassen, damit er sich im mit dem Query verbundenen Grid nicht verschiebt.

Das ganze mache ich wiefolgt:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
currentPosition := MyQuery.GetBookmark;
MyQuery.Close;
MyQuery.Open;

try
  MyQuery.GotoBookmark(currentPosition);
except
  ShowMessage('Fehler');
end;
MyQuery.FreeBookmark(currentPosition);

Nun kommt aber manchmal der Execption-Fehler: "Kein aktueller Datensatz vorhanden". Daher habe ich extra einen try...execpt Block iengebaut, um das abzufangen.
Delphi stoppt trotzdem an der Stelle mit einer Exception.

Wie kann ich das verhindern?
Kann ich irgendwie herauskriegen, ob currentPosition überhaupt gültig ist bevor ich mit GotoBookmark dorthin springe?


Habt vielen Dank


MrSpock - Do 01.08.02 16:35

Hallo Bart,

zur Überprüfung gibt es die Methode


Quelltext
1:
function BookmarkValid(Bookmark: TBookmark): Boolean;                    


mit der du prüfen kannst, ob ein Bookmarkgültig ist.

Wenn das Ganze in einem try ... except Block steht, wird eine Exception zur Laufzeit abgefangen. Führst du aber die Anwendung aus der Delphi IDE heraus aus, kommt es auf deine Debugger Einstellungen an. Dort kannst du festlegen, ob bei Exception angehalten werden soll oder nicht.


Cashels - Do 01.08.02 19:03

Hi Bart,

ich bin mir nicht sicher, aber gehen die Bookmarks nicht verloren nach Schliessen und Wiederöffnen einer Tabelle rsp. Query.

Gruss,
Tom


Bart - Fr 02.08.02 21:36

Verloren sind die Bookmark nicht.
In 80% der Fälle funktioniert es ja wunderbar.
Nur für den Rest wollte ich gerne evtl. Fehler abfangen.

Das mit ValidBookmark klingt logisch, läßt sich auch problemlos compilieren. Danke! Warum steht da in der Hilfe unter TBookmark nur kein Verweis drauf?

Nur zur Laufzeit stürzt mir das Programm immer genau beim Aufruf dieser Funktion mit einer Exception ala Zugriffsverletzung ab.

Die Lösung:

Die Bookmark darf nicht nil sein! Also vorher lieber 'ne Abfrage machen.

Grüße