私が働いているプロジェクトには以下のようなコードがあります。個人的にTDatasetブックマークはどのくらい有効ですか?
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;
、私は多くのブックマークを使用していない - 私は唯一のカーソル位置を移動したデータセットを再配置することを除いて(リストを作成するには、文字列リストを埋める、など)。 I Refresh
、更新(特にフィルタでレコードを非表示にできる場合)、再取得(Close
/Open
)、またはデータセット内のデータを変更する操作はブックマークを使用しません。私はLocate
をプライマリキー(もちろんTClientDataset
を使用しています)またはパラメータを変更することをお勧めします。
ブックマークはいつ有効ですか? Refresh
まで? Close
/Open
までデータを再取得するまでですか?セーフゾーンはどこで終了するのですか?
私はTClientDataset
にTSQLQuery
(DbExpress)を使用しています。
いくつかの実験の後、BookmarkValidさえそれ自体が信頼できないことが証明されます。これは、データセットでフィルタを有効にしたときに発生します。レコードがフィルタ条件と一致しなくてもtrueを返します。最終的には例外がスローされます。 –