Как отправить данные в базу данных сразу после редактирования в firemonkey TStringGrid

В Rad Studio 10.3 я подключаю StringGrid к базе данных с помощью мастера LiveBindins и выбираю FireDAC. Все в порядке, кроме следующей проблемы:

Когда пользователь редактирует ячейку и нажимает Enter, значение редактируется правильно, но новое значение не публикуется в базе данных, пока пользователь не перейдет к другой строке. Другими словами, если пользователь изменяет значение ячейки и остается в текущей строке, новое значение не отправляется в базу данных.

Есть ли способ опубликовать новое значение сразу после редактирования? Если да, то как?

Если требуется образец, вот ссылка на образец проекта моего выпуска.


person Moj.H    schedule 25.08.2019    source источник


Ответы (1)


новое значение не публикуется в базе данных!

Одна из причин, по которой это не так, состоит в том, чтобы позволить пользователю передумать и отменить изменение. Изменения в базе данных часто влекут за собой последствия активации, например. с помощью триггеров на стороне сервера для внесения изменений/добавлений/удалений в другие таблицы для обеспечения согласованности данных.

Итак, вам нужно вызвать метод набора данных Post, чтобы сохранить изменение в базе данных, желательно после того, как пользователю будет предложено подтвердить или отменить изменение. TBindNavigator является часто используемым, ненавязчивым способом сделать это и включает в себя кнопки Save и Cancel, которые загораются, как только вносятся изменения в любое поле в наборе данных, поэтому пользователю не нужно сталкиваться с всплывающими окнами. диалоговое окно с вопросом, следует ли внести изменение или отменить его.

Если вы хотите избежать использования TBindNavigator, вы можете настроить обработчик событий в StringGrid следующим образом:

procedure TForm2.StringGrid1EditingDone(Sender: TObject; const ACol,
  ARow: Integer);
begin
  if DataSet.State in [dsEdit, dsInsert] then
    DataSet.Post;
end;
person MartynA    schedule 25.08.2019
comment
Спасибо за Ваш ответ! На самом деле в этом случае я не хочу иметь BindNavigator и не хочу подтверждения пользователя (на основе запроса моего клиента). Мне нужно опубликовать данные сразу, когда пользователь нажимает Enter после редактирования ячейки. Итак, как мне это сделать? - person Moj.H; 25.08.2019
comment
Было бы полезно, если бы вы упомянули эти требования в своем вопросе. В любом случае, смотрите обновление моего ответа. - person MartynA; 25.08.2019
comment
Виноват! Я очень благодарен за вашу помощь. - person Moj.H; 25.08.2019