У меня есть код, как показано ниже в проекте, в котором я работаю.Как долго заставка 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
, обновите (особенно, когда фильтр может сделать запись невидимой), refetch (Close
/Open
) или любую операцию, которая изменяет данные в наборе данных, я не использую закладки. Я предпочитаю использовать Locate
на первичном ключе (используя, конечно, TClientDataset
) или изменить параметры.
До тех пор, пока не будет включена закладка? До Refresh
? Пока не будет выполнен Close
/Open
для получения данных? Где заканчивается безопасная зона?
Рассмотрите в ответе, что я использую TClientDataset
с TSQLQuery
(DbExpress).
После некоторых экспериментов даже BookmarkValid оказывается ненадежным. Это происходит, когда у вас есть фильтр, активированный в наборе данных - он возвращает true, даже если запись не соответствует условию фильтра. Конечным результатом является выброс исключения. –