Bonjour,

j'étais en train de lire un article sur l'utilisation de Raise et je me rends compte qu'il me manque des connaissances de base pour comprendre le propos.
Dès qu'une exception est levée, le programme recherche dans la pile de fonction en cours une fonction qui contient un gestionnaire d'exception. Une exception levée est propagée dans les procedures et fonctions en remontant les différents appels jusqu'à ce qu'elle soit capturée dans un bloc except. A ce moment, la propagation de l'exception s'arrete. Le reste du code de chaque fonction est ignoré.

Une fois l'exception traitée, le programme se poursuit après le bloc de gestion d'exception et non après l'instruction qui a provoqué l'exception.

Si l'exception n'est pas capturée en remontant la hiérarchie des procédures, elle est traitée par la méthode HandeException de l'objet Application qui définit un comportement par défaut. Il est possible de rédéfinir cette méthode pour en modifier le comportement : par exemple ajouter un message dans un fichier log qui contiendra les exceptions levées.
Je ne comprends pas "recherche dans la pile de fonction en cours une fonction qui contient un gestionnaire d'exception". Concrètement cela veut dire quoi quand j'écris :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 except
   on E: EFDDBEngineException do begin
    {$IFDEF DEBUG}
     Showmessage(E.Message + LineBreak + 'Failed SQL: ' + E.SQL);
     Raise;
    {$ENDIF}
     eErr:= eSQLerr;
   end;
  end;
Quelle est la pile de fonction en cours ? (fonctions)

Merci. Zac