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;
È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top