Delphi: отмена TDataSet.Post в событии OnBeforePost - PullRequest
14 голосов
/ 08 мая 2009

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

  • ОК позволяет вещам идти своим чередом
  • Отмена сейчас делает 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 Ответ

22 голосов
/ 08 мая 2009

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

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

...