2009-05-08 13 views
14

Nella schermata di immissione dei dati principale, è presente una finestra di dialogo OK/Annulla nell'evento OnBeforePost.Delphi: Annullamento di un TDataSet.Post in un evento OnBeforePost

  • OK lascia le cose seguano il loro corso
  • Annulla in questo momento fa un Dataset.Cancel;

che fa quello che ha significato per, ripristinare le modifiche e mette l'insieme di dati in modalità di visualizzazione.

Questo va bene per la maggior parte dei clienti, ma c'è stato chiesto se può essere cambiato in

  • Annulla, Abort il Post e rimanere in modalità di modifica con i cambiamenti in corso tenuto.

Se desiderano annullare, possono utilizzare il pulsante Annulla.

Guardando la fonte per procedure TDataSet.Post; non sembra possibile utilizzare l'evento in questo modo.

Dose qualcuno ha qualche idea su come questo potrebbe essere fatto?

Follow Up: questo è il modo che ho scelto per gestire la cosa ora

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

risposta

22

chiamata al metodo Abort (dall'unità System, se ricordo bene) solleva un EAbort un'eccezione silenziosa, che annulla solo la corrente operazione. Questo dovrebbe funzionare

(Btw: questo metodo di annullamento di un'operazione di database è anche descritto da qualche parte in profondità nel sistema di guida come il modo "normale" per ottenere ciò --- ecco dove ho ricevuto questa tecnica originariamente).

+0

Grazie, funziona bene. sembra un po 'un trucco. Ma Cancellare un post è un po 'un trucco per stare con –

+1

Sono d'accordo che sembra un trucco, ma sicuramente non lo è (o almeno dovrebbe essere così). Vedi i documenti: tinyurl.com/pxjuqs E in realtà, penso che cancellare un post sia perfettamente comprensibile, anche :) – onnodb

Problemi correlati