Delphi: Annulation d'un TDataSet.Post dans un événement OnBeforePost
Question
Sur notre écran principal de saisie des données, nous avons une boîte de dialogue OK / Annuler dans l'événement OnBeforePost.
- OK laisse les choses suivre leur cours
- Annuler effectue maintenant un
jeu de données.Annuler;
Qui fait ce qu'il est censé faire, annule les modifications et met l'ensemble de données en mode navigation.
Cela convient à la plupart des clients, mais on nous a demandé s’il pouvait être remplacé par
.- Annuler , abandonnez la publication et restez en mode édition avec les modifications actuelles conservées.
S'ils veulent annuler, ils peuvent utiliser le bouton Annuler.
En regardant la source de la procédure TDataSet.Post;
, il ne semble pas possible d'utiliser l'événement de cette façon.
Quelqu'un a-t-il une idée de la manière dont cela pourrait être fait?
Suivi: voici comment j'ai choisi de le gérer maintenant
case MessageDlg('Save Changes?', mtWarning, [mbYes, mbNo, mbAbort], 0) of
mrYes: ;
mrNo: Dataset.Cancel;
mrAbort: Abort;
mrNone: Abort;
end;
La solution
L'appel de la méthode Abort
(à partir de l'unité Système
, si je me souviens bien) génère une exception silencieuse EAbort
, qui annule uniquement le programme en cours. 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 au fond du système d’aide, comme le moyen "normal" d'y parvenir - c'est là que j'ai eu cette technique à l'origine).