私が取り組んでいるプロジェクトには、以下のようなコードがあります。
procedure TForm.EditBtnClick(Sender:TObject);
begin
// Mark is form variable. It's private
Mark = cdsMain.GetBookmark;
// blabalbal
.
.
.
end;
procedure TForm.OkBtnClick(Sender:TObject);
var
mistakes: Integer;
begin
//Validation stuff and transaction control
//removed to not clutter the code
If cdsMain.ChangeCount <> 0 then
mistakes := cdsMain.AppyUpdates(-1);
cdsMain.Refresh;
try
cdsMain.GotoBookmark(Mark);
// Yes, I know I would have to call FreeBookmark
// but I'm just reproducing
except
cdsMain.First;
end;
end;
個人的には、ブックマークをあまり使用しません。ただし、カーソル位置のみを移動したデータセットの位置を変更する場合を除きます(リストの作成、文字列リストの入力など)。Refresh
更新(特にフィルターによってレコードが非表示になる可能性がある場合)、再フェッチ(/ Close
)Open
、またはデータセット内のデータを変更する操作の場合、ブックマークは使用しません。私Locate
は主キーを使用するか(TClientDataset
もちろん、を使用して)、パラメーターを変更して再クエリすることを好みます。
ブックマークはいつまで有効ですか?までRefresh
?Close
データを再フェッチするために/が実行されるまでOpen
?セーフゾーンはどこで終わりますか?
私が(DbExpress)で使用TClientDataset
している答えを考えてみてください。TSQLQuery