У меня есть код, показанный ниже, в проекте, над которым я работаю.
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
, обновляю (особенно когда фильтр может сделать запись невидимой), повторно загружаю (_3 _ / _ 4_) или любую операцию, которая изменяет данные в наборе данных, я не использую закладки. Я предпочитаю Locate
на первичном ключе (используя, конечно, TClientDataset
) или повторно изменять параметры.
До каких пор закладка действительна? До Refresh
? Пока не будет сделано _8 _ / _ 9_ для повторной выборки данных? Где заканчивается безопасная зона?
Учтите, что в ответе я использую TClientDataset
с TSQLQuery
(DbExpress).