Дельфи:Отмена TDataSet.Post в событии OnBeforePost
Вопрос
На нашем главном экране ввода данных у нас есть диалоговое окно «ОК/Отмена» в событии OnBeforePost.
- ХОРОШО пусть все идет своим чередом
- Отмена прямо сейчас делает
Dataset.Cancel;
Он делает то, для чего предназначен: откатывает любые изменения и переводит набор данных в режим просмотра.
Это подходит большинству клиентов, но нас спросили, можно ли изменить это на
- Отмена, Прервать публикацию и остаться в режиме редактирования с сохранением текущих изменений.
Если они хотят отменить, они могут использовать кнопку отмены.
Глядя на источник для procedure TDataSet.Post;
использовать событие таким образом невозможно.
Есть ли у кого-нибудь мысли о том, как это можно сделать?
Следовать за:вот как я решил поступить с этим сейчас
case MessageDlg('Save Changes?', mtWarning, [mbYes, mbNo, mbAbort], 0) of
mrYes: ;
mrNo: Dataset.Cancel;
mrAbort: Abort;
mrNone: Abort;
end;
Решение
Вызов метода Abort
(из отряда System
, если я правильно помню) поднимает молчание EAbort
исключение, которое отменяет только текущую операцию.Это должно сработать.
(Кстати:этот метод отмены операции с базой данных также описан где-то глубоко в справочной системе как «обычный» способ добиться этого — именно оттуда я изначально взял эту технику).