PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV 2024 → Traitement des erreurs
Traitement des erreurs
Started by Yves, Jan., 09 2019 9:31 PM - 3 replies
Registered member
25 messages
Popularité : +3 (3 votes)
Posted on January, 09 2019 - 9:31 PM
Bonjour
J'ai lu toute la doc sur le traitement des erreurs, mais je voudrais avoir votre avis comment vous gérez ce problème dans vos applications
dois-je modifier au début de chaque code pour avoir un traitement automatique
ou faut-il juste le préciser dans le code de la première fenêtre ?

merci de vos réponses et recommandations
cordialement
Yves

--
yves67
Registered member
948 messages
Popularité : +30 (92 votes)
Posted on January, 11 2019 - 10:47 PM
Coucou,

Mécanisme des exceptions générales

Rappelle :
A)Si le traitement d'exception est déclaré dans le code d'initialisation du projet, 
il est valide pour toute erreur se produisant dans le projet.

B)Si le traitement d'exception est déclaré dans le code de déclaration des globales d'une fenêtre, 
il est valide pour toute erreur survenant dans la fenêtre :
un champ de la fenêtre
une procédure locale

C)Si le traitement d'exception est déclaré dans un traitement quelconque, 
il est valide pour toute erreur se produisant dans ce traitement.

Reference: https://doc.pcsoft.fr/?3034001

Si tu est dans le cas ' A ', tu dois préciser le code à l’initialisation du projet
// Code d'initialisation du projet ( https://doc.pcsoft.fr/?3034001 )
QUAND EXCEPTION
// On arrête l'application
FinProgramme()
FIN

Si tu est dans les autres cas tu peut utiliser la
Gestion automatique des exceptions




Reference: https://doc.pcsoft.fr/?3034010

Tu peut aussi utiliser la fonction ExceptionChangeParamètre
// Automatic management of errors
ExceptionChangeParamètre(epGotoCasException)
CAS EXCEPTION:
// TonCode

Reference: https://doc.pcsoft.fr/?3034007&name=exceptionchangeparametre_fonction

Proteger une zone de code spécifique :
// Procédure globale ValeurChamp (https://doc.pcsoft.fr/?3034001)
// Renvoie la valeur du champ ou "" si le champ n'existe pas
Procedure ValeurChamp(NomChamp)
// Du code ...
QUAND EXCEPTION
// Pour l'erreur de code ChampInconnu, on renvoie ""
SI ExceptionInfo(errCode) = ChampInconnu ALORS RENVOYER ""
// Pour une autre erreur, on appelle le gestionnaire d'erreur du projet
EXCEPTION
FIN
// Du code ...

Mais aussi Ré-active le traitement d'exception en cours si l'exception a pu être corrigée.
PROCEDURE INTERNE _TraceTableauAssociatif(_taTableau, _nDepth est un entier = 0)
POUR TOUT _xElement, _sKey de _taTableau
QUAND EXCEPTIONEXCEPTION DANS
TraceConstruit("%1>%2" + TAB + "%3", Répète(" ", _nDepth), _sKey, _xElement)
FAIRE
ExceptionActive()
TraceConstruit("%1+%2", Répète(" ", _nDepth), _sKey)
// Recursif ^^
_TraceTableauAssociatif(_xElement, _nDepth + 1)
FIN
FIN

Reference:
https://doc.pcsoft.fr/?3034002&name=exceptionactive_fonction
https://forum.pcsoft.fr/fr-FR/pcsoft.fr.windev/208680-description-variable/read.awp

Traitement d'exception et threads :
Si un traitement d'exception général est effectué dans le code d'initialisation du projet, 
il sera déclenché si une exception survient :

    dans le thread principal,
    dans un thread secondaire lancé par la fonction ThreadExécute.

Cependant, si le thread secondaire déclenche une exception, 
il ne sera pas possible de connaître son origine avec la fonction ExceptionInfo dans le code du projet. 
Pour connaître l'origine d'une exception dans un thread secondaire, 
il faut inclure le traitement de l'exception dans le thread secondaire.


Reference: https://doc.pcsoft.fr/?3077004

---
In üs we trust - #92i - #LaPiraterieNestJamaisFinie - #Friday - #FuckUnFrigidaireVide


#taggezmoicommejamm111111



Message modified, January, 12 2019 - 12:41 AM
Registered member
25 messages
Popularité : +3 (3 votes)
Posted on January, 12 2019 - 9:26 PM
Bonjour
merci pour cette réponse, elle est très complète
mais j'ai une question
si je veux être dans le cas A, c'est à dire pour tout le projet, il faut que le mette le CAS Exception dans la déclaration des variables globales du projet
ou dans les variables globales de la première fenêtre ?
et pour les erreurs HFSQL, il faut que je crée aussi un CAS ERREUR ??
je vais refaire des tests, merci de votre aide
cordialement
Yves67

--
yves67
Registered member
25 messages
Popularité : +3 (3 votes)
Posted on January, 13 2019 - 11:53 AM
Rebonjour
Je viens de faire quelques tests
1- j'ai mis dans le code d'initialisation du projet, où sont déclarés les variables globales du projet un appel à une procédure globale pour le traitement des erreurs et des exceptions (je pointe sur la même procédure)
2-lors d'une erreur de doublon, je viens bien dans la procédure globale, sauf que je ne connais pas la ligne qui a provoqué l'erreur, seulement le fichier, parce que j'ai mis HSurErreur("*",hTout,"SurAutreErreur") dans le code de la première fenêtre, sinon les
erreurs HFSQL ne viennent pas dans la procédure globale, sinon je ne vais pas dans la procédure globale
3-lors d'un dépassement de tableau, dans une boucle, je ne vais pas dans la procédure globale, j'ai la fenêtre d'erreur de windev et l'application se ferme, par contre si je mets une excéption dans le code initial je vais bien dans ce code...

merci de votre aide

Yves67

--
yves67
Message modified, January, 13 2019 - 12:18 PM