Delphi: отмена TDataSet.Post в событии OnBeforePost

На главном экране ввода данных у нас есть диалог OK/Отмена в событии OnBeforePost.

  • OK позволяет вещам идти своим ходом.
  • Отмена прямо сейчас делает Dataset.Cancel;

Что делает то, что он имел в виду, откат любых изменений и перенос данных в режим просмотра.

Это нормально для большинства клиентов, но нас спросили, можно ли его изменить на

  • Отмена, Прервать сообщение и оставаться в режиме редактирования с сохраненными текущими изменениями.

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

Если посмотреть на источник для procedure TDataSet.Post;, это не похоже на использование этого события.

У кого-нибудь есть какие-то мысли о том, как это можно сделать?

Follow Up: вот как я сейчас решил обработать его

case MessageDlg('Save Changes?', mtWarning, [mbYes, mbNo, mbAbort], 0) of
  mrYes: ;
  mrNo: Dataset.Cancel;
  mrAbort: Abort;
  mrNone: Abort;
end;

Ответы

Ответ 1

Вызов метода Abort (из блока System, если я правильно помню) вызывает исключение EAbort без звука, которое отменяет только текущую операцию. Это должно работать.

(Btw: этот метод отмены операции набора данных также описывается где-то глубоко в справочной системе как "нормальный" способ достижения этого --- то, откуда я получил эту технику изначально).