Ein Dataset ist in der Tat ein fragiles Element, bezüglich des Datensatzzeigers. Man verwendet Bookmarks, um an eine bestimmte, vorher bekannte(!) Stelle zu hüpfen, z.B. so:
Delphi-Quellcode:
Procedure NonDescructiveDataSetOperation(aDataSet : TDataset);
Var
bookMark: TBookmark;
Begin
bookMark := aDataSet.GetBookmark();
Try
DoSomeThingWhichMightMoveTheRecordPointer(aDataSet);
Finally
aDataSet.GotoBookmark(bookMark);
aDataSet.FreeBookmark(bookMark);
End
End;
Getippt und nicht getestet.
Allerdings werden die Operationen dann ziemlich lahm (GetBookmark/GotoBookmark). Einfacher und besser ist eine Vereinbarung (bzw. Prüfung, z.B. , die das Verschieben des Datensatzzeigers verbietet. Allerdings ist es nicht trivial herauszubekommen, ob der Datensatzzeiger verschoben wurde. Es existiert zwar eine Eigenschaft 'RecNo' (Datensatz-Nr.), aber die ist nicht unbedingt implementiert.