Delphi: annullamento di un TDataSet.Post in un evento OnBeforePost
Domanda
Nella nostra schermata di immissione dati principale, abbiamo una finestra di dialogo OK / Annulla nell'evento OnBeforePost.
- OK consente alle cose di fare il loro corso
- Annulla in questo momento esegue un
Dataset.Cancel;
Che fa quello che deve fare, ripristinare tutte le modifiche e mettere il set di dati in modalità di navigazione.
Questo va bene per la maggior parte dei clienti, ma ci è stato chiesto se può essere modificato in
- Annulla , interrompe la posta e mantieni la modalità di modifica mantenendo le modifiche correnti.
Se vogliono annullare, possono usare il pulsante Annulla.
Osservando l'origine della procedura TDataSet.Post;
non sembra possibile utilizzare l'evento in questo modo.
Qualcuno ha qualche idea su come farlo?
Follow-up: ecco come ho scelto di gestirlo ora
case MessageDlg('Save Changes?', mtWarning, [mbYes, mbNo, mbAbort], 0) of
mrYes: ;
mrNo: Dataset.Cancel;
mrAbort: Abort;
mrNone: Abort;
end;
Soluzione
La chiamata del metodo Abort
(dall'unità System
, se ricordo bene) solleva un'eccezione silenziosa EAbort
, che annulla solo l'attuale operazione. Dovrebbe funzionare.
(A proposito: questo metodo di annullamento di un'operazione di banca dati è anche descritto da qualche parte nel sistema di aiuto come il modo "normale" per ottenere questo --- è da lì che ho preso questa tecnica originariamente).