У меня есть код, подобный приведенному ниже, в проекте, над которым я работаю.
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
не будет выполнен для повторного получения данных? Где заканчивается безопасная зона?
Учтите, что в ответе я использую TClientDataset
с TSQLQuery
(DbExpress).