Delphi: cancelar un TDataSet.Post en un evento OnBeforePost
Pregunta
En nuestra pantalla principal de entrada de datos, tenemos un cuadro de diálogo Aceptar / Cancelar en el evento OnBeforePost.
- OK permite que las cosas sigan su curso
- Cancelar ahora mismo hace un
Dataset.Cancel;
Que hace lo que debe hacer, revierte cualquier cambio y pone el conjunto de datos en modo exploración.
Esto está bien para la mayoría de los clientes, pero nos han preguntado si se puede cambiar a
- Cancelar , cancele la publicación y permanezca en modo de edición con los cambios actuales mantenidos.
Si quieren cancelar, pueden usar el botón cancelar.
Mirando la fuente del procedimiento TDataSet.Post;
no parece posible utilizar el evento de esta manera.
¿Alguien tiene alguna idea sobre cómo se podría hacer esto?
Seguimiento: así es como elegí manejarlo ahora
case MessageDlg('Save Changes?', mtWarning, [mbYes, mbNo, mbAbort], 0) of
mrYes: ;
mrNo: Dataset.Cancel;
mrAbort: Abort;
mrNone: Abort;
end;
Solución
Llamar al método Abort
(desde la unidad System
, si recuerdo correctamente) genera una excepción silenciosa EAbort
, que cancela solo la actual operación. Eso debería funcionar.
(Por cierto: este método de cancelar una operación de base de datos también se describe en algún lugar profundo del sistema de ayuda como la forma 'normal' de lograr esto --- de ahí obtuve esta técnica originalmente).