Also wir machen das immer so:
Delphi-Quellcode:
Var
B : TBookmark;
Begin
With MyDataSet
do Begin
DisableControls;
B := GetBookmark;
Try
if not Locate('
KeyField', SomeValue, [])
Then
Raise Exception.CreateFmt('
Cannot locate Value "%s"',[SomeValue]);
Edit;
FieldValues['
Foo'] := Bar;
Post;
Finally
GotoBookmark(B);
FreeBookmark (B);
EnableControls;
End
End
End;
Über Performance habe ich mir noch keine Gedanken gemacht; es ist schnell genug. Für reine In-Memory Datasets verwenden wir allerdings TdxMemData von Developer Express. Das ist leider nur in kostenpflichtigen Packages enthalten, alternativ ginge es eventuell mit TKbMemTable auch schnell.
Die TClientDatasets sind aber ziemlich flink, und ich denke mir, wenn Du vorher eine ultralahme Krücke hattest, die Du nun nur mit der besseren
DB-Abfrage ordendlich schnelle bekommst, solltest Du mit den klassischen Data-Methoden (Locate, Findfield etc.) eine ausreichende Performance bekommen.
Das Wichtigste ist sowieso das 'DisableControls/EnableControls'