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;
Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top