2009-05-08 12 views
14

En nuestra pantalla principal de entrada de datos, tenemos un cuadro de diálogo Aceptar/Cancelar en el evento OnBeforePost.Delphi: cancelando un TDataSet.Post en un evento OnBeforePost

  • OK deja que las cosas sigan su curso
  • Cancelar ahora hace un Dataset.Cancel;

cual hace lo que se supone que, deshacer los cambios y pone el conjunto de datos en modo de exploración.

Esto está bien para la mayoría de los clientes, pero se nos ha preguntado si se puede cambiar a

  • Cancelar, abortar el mensaje y permanecer en el modo de edición con los cambios actuales guardado.

Si desean cancelar, pueden usar el botón cancelar.

Al buscar en la fuente procedure TDataSet.Post; no parece posible utilizar el evento de esta manera.

Dosis ¿alguien tiene alguna idea de cómo se podría hacer esto?

Seguimiento: esta es la forma que he elegido para manejarlo ahora

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

Respuesta

22

Al llamar al método Abort (de la unidad System, si no recuerdo mal) plantea una silenciosa EAbort excepción, que anula sólo el actual operación. Eso debería funcionar.

(Por cierto: este método de cancelar una operación de databaset también se describe en algún lugar en el sistema de ayuda como la forma "normal" de lograr esto --- de ahí es de donde obtuve esta técnica).

+0

Gracias, eso funciona bien. parece un poco un hack. Pero la cancelación de un mensaje es un poco hack para estar con –

+1

Estoy de acuerdo en que se siente como un truco, pero definitivamente no es (o al menos se supone que es así). Ver los documentos: tinyurl.com/pxjuqs Y en realidad, creo que cancelar una publicación también es perfectamente sensato :) – onnodb

Cuestiones relacionadas