Interception des erreurs sous Delphi

Résolu
codial Messages postés 265 Date d'inscription mercredi 14 avril 2004 Statut Membre Dernière intervention 5 mai 2015 - 28 sept. 2004 à 19:08
jmp77 Messages postés 1119 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 4 octobre 2006 - 29 sept. 2004 à 14:09
Bonjour,

Je cherche comment on intercepte les erreurs sous Delphi pour éviter le message bloquant du BDEEngineError.

Je m'explique. J'ai deux tables avec une relation de 1 vers N j'ai créé l'intégrité référentielle.
Quand je veux supprimer un enregistrement de la table 1 alors que la clé existe dans la table N j'ai évidemment le message d'erreur bloquant du bde. Quel est l'équivalent de on error goto ..... de VB ?

J'ai essayé:

Application.OnException:=gestion_erreur;

procedure TForm10.FormShow(Sender: TObject);
begin
// affectation du gestionnaire d'exception
Application.OnException:=gestion_erreur;
end;

comme j'ai pu le lire sur le weeb mais ça ne marche pas!

D'avance merci

Cordialement

Codial

8 réponses

codial Messages postés 265 Date d'inscription mercredi 14 avril 2004 Statut Membre Dernière intervention 5 mai 2015 1
29 sept. 2004 à 12:08
Bonjour jmp77,

j'ai testé et tu as raison. Quand je lance l'exe c'est bon j'ai mon message d'erreur.

J'aurais pu chercher longtemps!!!

C'est dommage que ça ne fonctionne pas en mode debug mais maintenant je le saurais!!!

En fait, je suis plus habitué à VB6 mais en ce moment je découvre Delphi pour changer de langage et ça me plait bien!

merci beaucoup!

Codial
3
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
28 sept. 2004 à 21:45
Si ce n'est qu'un problème de suppression en cascade à maîtriser, ce n'est pas bien difficile à coder.
Sur la table maître, implémenter un évènement BeforeDelete.

Table1 est la table maitre et Table2 la table détail :
procedure TFGestionArticles.Table1BeforeDelete(DataSet: TDataSet);
begin
  //S'il existe des enregistrements dans la table détail
  if Table2.RecordCount > 0 then
  begin
    //Se positionner sur le premier enregistrement lié
    Table2.First;
    //Effacer tous les enregistrements liés
    while Table2.RecordCount > 0 do
      Table2.Delete;
  end;
end;


Masquer les erreurs renvoyées par le BDE n'est pas une solution acceptable.

Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
0
codial Messages postés 265 Date d'inscription mercredi 14 avril 2004 Statut Membre Dernière intervention 5 mai 2015 1
29 sept. 2004 à 01:00
Bonsoir,

merci pour cette réponse. Mais en fait ce que je veux c'est que si l'utilisateur veut supprimer un enregistrement dans la table maitre alors qu'il y la clé dans la table détail pouvoir intercepter l'erreur et remplacer le message bloquant du DBE... par un message personnalisé du genre ' Impossible de supprimer il existe des enregistrements connxes dans la table <détail>.
D'une manière générale comment on fait pour intercepter une erreur sous Delphi. Sous VB c'est On error goto .

Cordialement

Codial
0
MoveX Messages postés 230 Date d'inscription vendredi 9 mai 2003 Statut Membre Dernière intervention 16 juillet 2005 1
29 sept. 2004 à 07:19
jaimerais bien le meme type d info, pour remplcer les messages derreur qu il y a avec les sockets, comme par exemple, lorsqu on entre un string a la place d un integer ou lorsque la connexion plante...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jmp77 Messages postés 1119 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 4 octobre 2006 7
29 sept. 2004 à 09:29
Et bien utiliser un try .. except pour récupérer les erreurs. Ca ne fonctionne pas avec ?

Bonne prog,
JMP.
0
codial Messages postés 265 Date d'inscription mercredi 14 avril 2004 Statut Membre Dernière intervention 5 mai 2015 1
29 sept. 2004 à 11:11
Bonjour,

voilà j'ai essayé ça mais ça ne marche pas j'ai toujours le message d'erreur bloquant!
Quelqu'un peut me m'expliquer pourquoi?
//==========================================
begin
ID_Fich :=StrToInt(inPUTBox('Suppression','Saisir le numéro de la fiche à supprimer',''));
if (RechercheFiche(ID_Fich)) then showMessage('Cette fiche n''exsite pas')
else
Try
table1.Delete;
Except
ShowMessage('Ne peut pas supprimer car il existe des enregistrement connexes ...');

End;
End;
//=============================================

D'avance merci
Cordialement
0
jmp77 Messages postés 1119 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 4 octobre 2006 7
29 sept. 2004 à 11:39
Tu as le message bloquant en mode débugage mais pas en mode execution classique.

Lance l'exe seul sans passer par delphi et dit moi.

JMP.
0
jmp77 Messages postés 1119 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 4 octobre 2006 7
29 sept. 2004 à 14:09
De rien.

Bonne continuation en delphi.

JMP.
0
Rejoignez-nous