Я не могу говорить за BDE, так как не хочу больше связываться с ним, но то, что вы описали, я могу прочитать так:
Почему AnyDAC не обновляет кортеж перед началом редактирования?
Если это так, и поправьте меня, если я ошибаюсь, это было бы совершенно против UX. Представьте, что вы являетесь пользователем своего собственного приложения и хотите отредактировать определенный кортеж в представлении сетки данных. Вы нажмете какую-нибудь кнопку редактирования, чтобы войти в режим редактирования, и вся строка внезапно изменится перед вашими глазами (или редактор будет заполнен другими данными, чем вы видели). Хотели бы вы, чтобы это произошло?
Если это так, то, боюсь, вам придется выполнить такое обновление вручную с помощью AnyDAC (или FireDAC). Дело в том, что движок либо блокирует кортеж по транзакции, либо отслеживает изменения во внутреннем хранилище, пока вы находитесь в режиме редактирования.
Ни в том, ни в другом случае кортеж не обновляется перед началом редактирования (независимо от того, какие параметры блокировки вы используете). И меня лично это поведение устраивает, поскольку оно может привести к тому, что я описал выше.
Итак, как я могу обновить активный кортеж перед началом редактирования?
Чтобы обновить конкретный кортеж, на который указывает курсор набора данных, до начала редактирования набора данных, вы можете вызвать, например, RefreshRecord из Например, событие BeforeEdit :
procedure TForm1.ADTable1BeforeEdit(DataSet: TDataSet);
begin
TADTable(DataSet).RefreshRecord;
end;
Но тогда ваши возможности редактирования базы данных становятся движущейся мишенью (ну, может быть, это уже так).
person
Victoria
schedule
01.03.2018