BookmarkDisable / BookmarkEnable
Die beiden Funktionen BookmarkDisable und BookmarkEnable gehören zusammen. Oft wird in einem Dataset eine Funktion durchgeführt, die den aktuellen Datensatz verändert, z.B. durch next, prior oder gar locate. Um das nun tun zu können, ohne dabei den Status vor der Operation zu verändern, ist oft ein Konstrukt wie folgt nötig:
Beispiel:
lBookmark := Dataset.Bookmark;
Dataset.DisableControls;
try
if Dataset.Locate('id', 1234, []) then
begin
Dataset.Edit;
Dataset.FieldByName('comment').AsString := 'irgendein Kommentar';
Dataset.Post;
end;
finally
Dataset.EnableControls;
Dataset.Bookmark := lBookmark;
end;
Würde man nun keine Vorkehrungen treffen, würde der aktuelle Datensatz am Ende der Operation nicht der sein vor Beginn der Operation, sondern der gerade bearbeitete Datensatz. Mit der Zeile
iDataset.BookmarkDisable.SetS('comment', 'irgendein Kommentar').Post.BookmarkEnable;
kann man das obige Konstrukt entsprechend abkürzen.
Wichtig ist hier noch, dass man nach einem DisableControls nicht vergessen darf, das EnableControls wieder auszusprechen. Sollte man es hier mit dem Interface je einmal vergessen, wird es automatisch ausgeführt, wenn das Interface ungültig wird.