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;
¿Fue útil?

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).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top