2009-05-08 8 views
14

Sur notre écran de saisie de données principal, nous avons une boîte de dialogue OK/Annuler dans l'événement OnBeforePost.Delphi: Annulation d'un TDataSet.Post dans un événement OnBeforePost

  • OK laisse les choses suivre leur cours
  • Annuler ne fait actuellement un Dataset.Cancel;

Ce qui fait ce qu'il est censé, annuler tout changement et met le jeu de données en mode de navigation.

Ceci est très bien pour la plupart des clients, mais on nous a demandé si elle peut être changée en

  • Annuler, Abandonner la Poste et de rester en mode édition avec les changements actuels conservés.

S'ils veulent annuler, ils peuvent utiliser le bouton Annuler.

En regardant la source pour procedure TDataSet.Post; il ne semble pas possible d'utiliser l'événement de cette façon.

Dose quelqu'un a des idées sur la façon dont cela pourrait être fait?

Suivi: voilà comment j'ai choisi de gérer maintenant

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

Répondre

22

appel de la méthode Abort (de l'unité System, si je me souviens bien) soulève un EAbort silencieux exception, ce qui annule tout le courant opération. Cela devrait fonctionner. (Btw: cette méthode d'annulation d'une opération de base de données est également décrite quelque part dans le système d'aide comme la façon «normale» d'y parvenir - c'est de là que j'ai tiré cette technique à l'origine).

+0

Merci, ça marche bien. semble être un peu un hack. Mais annuler un post est un peu un hack d'être avec –

+1

Je suis d'accord que cela ressemble à un hack, mais ce n'est certainement pas (ou du moins c'est censé être comme ça). Voir les docs: tinyurl.com/pxjuqs Et en fait, je pense que l'annulation d'un post est parfaitement sensée, aussi :) – onnodb

Questions connexes