Interception des erreurs sous Delphi [Résolu]

codial 270 Messages postés mercredi 14 avril 2004Date d'inscription 5 mai 2015 Dernière intervention - 28 sept. 2004 à 19:08 - Dernière réponse : jmp77 1232 Messages postés lundi 4 février 2002Date d'inscription 4 octobre 2006 Dernière intervention
- 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
Afficher la suite 

8 réponses

Répondre au sujet
codial 270 Messages postés mercredi 14 avril 2004Date d'inscription 5 mai 2015 Dernière intervention - 29 sept. 2004 à 12:08
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de codial
cs_Delphiprog 4580 Messages postés samedi 19 janvier 2002Date d'inscription 9 janvier 2013 Dernière intervention - 28 sept. 2004 à 21:45
0
Utile
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.
Commenter la réponse de cs_Delphiprog
codial 270 Messages postés mercredi 14 avril 2004Date d'inscription 5 mai 2015 Dernière intervention - 29 sept. 2004 à 01:00
0
Utile
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
Commenter la réponse de codial
MoveX 230 Messages postés vendredi 9 mai 2003Date d'inscription 16 juillet 2005 Dernière intervention - 29 sept. 2004 à 07:19
0
Utile
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...
Commenter la réponse de MoveX
jmp77 1232 Messages postés lundi 4 février 2002Date d'inscription 4 octobre 2006 Dernière intervention - 29 sept. 2004 à 09:29
0
Utile
Et bien utiliser un try .. except pour récupérer les erreurs. Ca ne fonctionne pas avec ?

Bonne prog,
JMP.
Commenter la réponse de jmp77
codial 270 Messages postés mercredi 14 avril 2004Date d'inscription 5 mai 2015 Dernière intervention - 29 sept. 2004 à 11:11
0
Utile
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
Commenter la réponse de codial
jmp77 1232 Messages postés lundi 4 février 2002Date d'inscription 4 octobre 2006 Dernière intervention - 29 sept. 2004 à 11:39
0
Utile
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.
Commenter la réponse de jmp77
jmp77 1232 Messages postés lundi 4 février 2002Date d'inscription 4 octobre 2006 Dernière intervention - 29 sept. 2004 à 14:09
0
Utile
De rien.

Bonne continuation en delphi.

JMP.
Commenter la réponse de jmp77

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.