Interception des erreurs sous Delphi [Résolu]

Signaler
Messages postés
265
Date d'inscription
mercredi 14 avril 2004
Statut
Membre
Dernière intervention
5 mai 2015
-
Messages postés
1119
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
4 octobre 2006
-
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

Messages postés
265
Date d'inscription
mercredi 14 avril 2004
Statut
Membre
Dernière intervention
5 mai 2015
1
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
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
28
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.
Messages postés
265
Date d'inscription
mercredi 14 avril 2004
Statut
Membre
Dernière intervention
5 mai 2015
1
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
Messages postés
230
Date d'inscription
vendredi 9 mai 2003
Statut
Membre
Dernière intervention
16 juillet 2005
1
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...
Messages postés
1119
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
4 octobre 2006
5
Et bien utiliser un try .. except pour récupérer les erreurs. Ca ne fonctionne pas avec ?

Bonne prog,
JMP.
Messages postés
265
Date d'inscription
mercredi 14 avril 2004
Statut
Membre
Dernière intervention
5 mai 2015
1
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
Messages postés
1119
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
4 octobre 2006
5
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.
Messages postés
1119
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
4 octobre 2006
5
De rien.

Bonne continuation en delphi.

JMP.