OVH Cloud OVH Cloud

[WD9] - Traitement d'exception

9 réponses
Avatar
Vincent
Je veux capter les erreurs non gérés et empécher l'application de se
fermer :

Dans le bloc d'initialisation du projet j'ai mis :

QUAND EXCEPTION
Erreur("une erreur est survenue : " +CR + ExceptionInfo(errComplet))
FIN

Pourtant l'application se ferme quand même !

si je lis l'aide, il est indiquer de spécifier FinProgramme pour
terminer l'application en cas d'erreur, ce qui laisse supposer que si on
ne le spécifie pas, l'application ne se termine pas.

Si dans mon bloc, je met reprisesaisie, j'ai une erreur puisque PROJET
ne peux pas recevoir de focus.

donc comment faire un code générique au niveau du projet pour intercepté
les erreurs non gérées et NE PAS fermer l'application.

Merci.

9 réponses

Avatar
Dev
Bonjour,
rajouter exceptionactive() ;retour
?

--
Cordialement
Christophe Charron

Service Développement
PROLOGIQ
7 bis Rue des Aulnes
69410 Champagne au Mont d'Or

Tel : 0 437 499 107
Fax : 0 437 499 105
mailto:

"Vincent" a écrit dans le message de
news:42f735b2$0$28849$
Je veux capter les erreurs non gérés et empécher l'application de se
fermer :

Dans le bloc d'initialisation du projet j'ai mis :

QUAND EXCEPTION
Erreur("une erreur est survenue : " +CR + ExceptionInfo(errComplet))
FIN

Pourtant l'application se ferme quand même !

si je lis l'aide, il est indiquer de spécifier FinProgramme pour
terminer l'application en cas d'erreur, ce qui laisse supposer que si on
ne le spécifie pas, l'application ne se termine pas.

Si dans mon bloc, je met reprisesaisie, j'ai une erreur puisque PROJET
ne peux pas recevoir de focus.

donc comment faire un code générique au niveau du projet pour intercepté
les erreurs non gérées et NE PAS fermer l'application.

Merci.



Avatar
Patrice Labracherie
"Vincent" a écrit dans le message de
news:42f735b2$0$28849$
Je veux capter les erreurs non gérés et empécher l'application de se
fermer :

Dans le bloc d'initialisation du projet j'ai mis :

QUAND EXCEPTION
Erreur("une erreur est survenue : " +CR + ExceptionInfo(errComplet))
FIN

Pourtant l'application se ferme quand même !




bonjour

amha, le traitement d'exception de projet est celui du dernier recours.
il vaut mieux plusieurs traitement par fenetre ou par bout de code.

un truc genre:
mafonction()
quand exception
renvoyer faux
fin
.... reste du code
Avatar
Vincent
Patrice Labracherie a écrit :
"Vincent" a écrit dans le message de
news:42f735b2$0$28849$

Je veux capter les erreurs non gérés et empécher l'application de se
fermer :

Dans le bloc d'initialisation du projet j'ai mis :

QUAND EXCEPTION
Erreur("une erreur est survenue : " +CR + ExceptionInfo(errComplet))
FIN

Pourtant l'application se ferme quand même !





bonjour

amha, le traitement d'exception de projet est celui du dernier recours.
il vaut mieux plusieurs traitement par fenetre ou par bout de code.



je suis d'accord, mais ca ne change pas le pb.
Comment empécher l'appli de se terminer en cas d'erreur non géré !

donc mettre plusieurs traitement par fenêtre (ou par bloc de code à
risque) n'interdit pas un gestionnaire par de dernier recours qui réagit
correctement.


un truc genre:
mafonction()
quand exception
renvoyer faux
fin
.... reste du code




Avatar
Vincent
Dev a écrit :
Bonjour,
rajouter exceptionactive() ;retour
?



j'ai essayé :

QUAND EXCEPTION
Erreur("une erreur est survenue : " +CR + ExceptionInfo(errComplet))
ExceptionActive()
RETOUR
FIN

toujours le même pb. je suis ejecté de l'application.
Avatar
DAIREAUX Jean-Baptiste
Comment le gestionnaire de derniers recours peut faire tourner une appli en
erreur ?
surtout si l'erreur n'est pas attendue ? où reprendre l'execution, quel état
redonné au variable global ?
Et quel état donné au variable local de la méthode interrompue ?

Je ne crois pas que l'on puisse empécher l'appli de se ternimer, tu peux
libérer les ressourses proprement, avertir l'utilisateur puis fermer...

Je crois que, quelque soit le language, on gére les erreurs dans les fen ou
dans des méthodes qui peuvent les recevoir. Les gestionnaires de dernier
recours n'ont jamais fait mieux que de permettre de fermer proprement
l'application.

Voila pour ce que j'en sais mais je connais mal toute les possibilités de
windev. S'il existe une possibilité je serai heureux de la connaitre.
J.B.D.
Avatar
mat
Vincent wrote:
Je veux capter les erreurs non gérés et empécher l'application de se
fermer :

Dans le bloc d'initialisation du projet j'ai mis :

QUAND EXCEPTION
Erreur("une erreur est survenue : " +CR + ExceptionInfo(errComplet))
FIN

Pourtant l'application se ferme quand même !

si je lis l'aide, il est indiquer de spécifier FinProgramme pour
terminer l'application en cas d'erreur, ce qui laisse supposer que si on
ne le spécifie pas, l'application ne se termine pas.

Si dans mon bloc, je met reprisesaisie, j'ai une erreur puisque PROJET
ne peux pas recevoir de focus.

donc comment faire un code générique au niveau du projet pour intercepté
les erreurs non gérées et NE PAS fermer l'application.

Merci.




Bonjour,

Je suis d'accord avec les autres commentaires à ce sujet mais je n'aime
non plus quand l'application se ferme. Il y a bien longtemps, j'avais
trouvé ce bout de code quelque part qui solutionne la chose dans le sens
qu'elle réactive les exceptions et ensuite re-affiche le menu.

QUAND EXCEPTION
SI ExceptionInfo(errCode)<>"" ALORS
Erreur(ExceptionInfo(errCode),ErreurInfo)
FIN
ExceptionActive()
Use(winMenu)
FIN

mais cela ne résout effectivement pas des problèmes potentiels avec les
variables du projet.

Salutations
Mat
Avatar
Vincent
DAIREAUX Jean-Baptiste a écrit :
Comment le gestionnaire de derniers recours peut faire tourner une appli en
erreur ?
surtout si l'erreur n'est pas attendue ? où reprendre l'execution, quel état
redonné au variable global ?
Et quel état donné au variable local de la méthode interrompue ?

Je ne crois pas que l'on puisse empécher l'appli de se ternimer, tu peux
libérer les ressourses proprement, avertir l'utilisateur puis fermer...


Je crois que, quelque soit le language, on gére les erreurs dans les fen ou
dans des méthodes qui peuvent les recevoir. Les gestionnaires de dernier
recours n'ont jamais fait mieux que de permettre de fermer proprement
l'application.



Effectivement, mais si l'erreur n'est pas critique, d'autres langages
laisse au développeur le choix de l'action à effectuer.

Mais, au risque de me répéter, il ne s'agit pas de centraliser la
gestion d'erreur au niveau du code d'initialisation du projet mais
simplement d'essayer de palier aux oublis de gestion propre d'erreur.

c'est quand même dommage de fermer l'appli, quand on clic sur un bouton
affichant le détail de l'enregistrement sélectionné alors que le fichier
est vide . et que le developpeur ne la pas testé.

Ceci n'est qu'un exemple. Connaissez vous une appli sans bug ...


Maintenant, si windev avez une gestion d'exeption par défaut, je n'aurai
s pas ce besoin.

Pour comparer avec delphi par exemple, l'accès à un élement 10 d'un
tableau de 3 éléments affiche un msg "Index hors limite" et ne ferme
pas l'appli sous windev, on est ejecté purement et simplement et les
exemples d'erreur simple ne manque pas (même si dans la version finale,
d'un logiciel, il ne doit plus y en avoir.)



Voila pour ce que j'en sais mais je connais mal toute les possibilités de
windev. S'il existe une possibilité je serai heureux de la connaitre.
J.B.D.




Avatar
DAIREAUX Jean-Baptiste
"Vincent" a écrit dans le message de
news:42f890e7$0$28091$
Pour comparer avec delphi par exemple, l'accès à un élement 10 d'un
tableau de 3 éléments affiche un msg "Index hors limite" et ne ferme
pas l'appli sous windev, on est ejecté purement et simplement et les
exemples d'erreur simple ne manque pas (même si dans la version finale,
d'un logiciel, il ne doit plus y en avoir.)




Dans le cas de Delphi en général on a soit des objets qui intercepte en
natif leur erreur et les géres avant de rendre la main à votre code, soit
une interception des erreurs dans la boucle de gestion des événements qui la
géres et reprend sont traitement.

En Windev je ne vois pas comment relancer la boucle de gestion des événement
si elle est cassé.

Mais bon encore une fois je ne connais pas trés bien windev ni delphi
d'ailleur.

(en fait je connais mal beaucoup de language ... :-)

J.B.D.
Avatar
Jean-Yves BURLOT
Vincent a écrit :
Je veux capter les erreurs non gérés et empécher l'application de se
fermer :

Dans le bloc d'initialisation du projet j'ai mis :

QUAND EXCEPTION
Erreur("une erreur est survenue : " +CR + ExceptionInfo(errComplet))
FIN

Pourtant l'application se ferme quand même !

si je lis l'aide, il est indiquer de spécifier FinProgramme pour
terminer l'application en cas d'erreur, ce qui laisse supposer que si on
ne le spécifie pas, l'application ne se termine pas.

Si dans mon bloc, je met reprisesaisie, j'ai une erreur puisque PROJET
ne peux pas recevoir de focus.

donc comment faire un code générique au niveau du projet pour intercepté
les erreurs non gérées et NE PAS fermer l'application.

Merci.



Bonjour,

Pour palier ce problème auprès de mes utilisateurs,

// Entête du projet
//GESTION DES EXCEPTIONS
SI EnModeTest() ALORS GOTO Label
QUAND EXCEPTION
sErreur est une Chaine = ExceptionInfo(errComplet)
// Traitement à la levée de l'exception
EnvoieEmail(sErrreur)
SI PAS(Ouvre(EcranFinAnormale)) ALORS
FinProgramme(sErreur)
SINON
fRepEnCours(fRepExe())
LanceAppli("LanceurProg "+fExtraitChemin(ExeInfo(exeNom), fFichier +
fExtension))
FinProgramme()
FIN
FIN
Label :
// suite du code du projet

Avantages:
- en mode debug : je ne lève pas d'exception, windev intercepte les
erreurs et bascule vers le débuggeur
- en mode Utilisateur final
* un email m'est systématiquement envoyé sur la cause de l'erreur
* on propose dans un ecran à l'utilisateur de redémarrer le
programme
==> l'exécutable LanceurProg me permet de relancer mon programme

Comme on dit faute de mieux on fait avec

chao

--
Jean-Yves BURLOT