Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1967 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [résolu] gestion d'erreurs

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[résolu] gestion d'erreurs

n°698304
lhonolulu
Posté le 13-04-2004 à 14:37:17  profilanswer
 

J'ai un programme qui tourne en boucle pour plusieurs clients. s'il y a une erreur d'éxécution dans le  programme alor j'ouvr le fichier "erreur" et je rentre le nom du client,n°erreur...Et a la fin d'aller a un autre client :
S'il y a une seule erreur cela marche. Mais s'il y a une 2ème erreur alors j'obtient l'alerte vb avec la possibilité de débogage.
J'ai fait un gestionnaire d'erreur tout bête avec on error goto oups
 
aller : l = l + 1
On Error GoTo oups
...instructions
 
oups:
Open "D:\Stage\Ludovic\erreur.txt" For Append As #1
Print #1, ""
Print #1, "erreur : client " & selection.LstClients_Pays.List(l - 1)
Print #1, ""
Close #1
GoTo aller
J'ai du oublié un truc pour kil gére chaque erreur et non que la 1ère
merci


Message édité par lhonolulu le 14-04-2004 à 14:14:58
mood
Publicité
Posté le 13-04-2004 à 14:37:17  profilanswer
 

n°698324
cvb
Posté le 13-04-2004 à 14:57:00  profilanswer
 

lhonolulu a écrit :

J'ai un programme qui tourne en boucle pour plusieurs clients. s'il y a une erreur d'éxécution dans le  programme alor j'ouvr le fichier "erreur" et je rentre le nom du client,n°erreur...Et a la fin d'aller a un autre client :
S'il y a une seule erreur cela marche. Mais s'il y a une 2ème erreur alors j'obtient l'alerte vb avec la possibilité de débogage.
J'ai fait un gestionnaire d'erreur tout bête avec on error goto oups
 
aller : l = l + 1
On Error GoTo oups
...instructions
 
oups:
Open "D:\Stage\Ludovic\erreur.txt" For Append As #1
Print #1, ""
Print #1, "erreur : client " & selection.LstClients_Pays.List(l - 1)
Print #1, ""
Close #1
GoTo aller
J'ai du oublié un truc pour kil gére chaque erreur et non que la 1ère
merci


 
 
les erreurs des programmes pour les gérer c'est :
 

Code :
  1. dim ERREUR1 as variant
  2. on error goto ERREUR1
  3. ---- code ------
  4. ERREUR1:
  5. exit sub ou function
  6. {traitrement de l'erreur}
  7. end sub ou fonction


 
Dans la gestion d'erreur tu peux mettre une étiquette qui renverra à ton code, mais c'est pas trés propre, normalement ton code ne doit pas générer d'erreur et doit prendre à 98% toutes les possibilités de l'utilisateur. Les 2% restants sont les erreurs que tu n'auras pas vu aprés des heures de recherches. La meillieur façon de les trouver c'est de simuler....
 

Code :
  1. dim retour_code, oups as variant
  2. On Error GoTo oups
  3. ...instructions
  4. retour_code :
  5. Open "D:\Stage\Ludovic\erreur.txt" For Append As #1
  6. Print #1, ""
  7. Print #1, "erreur : client " & selection.LstClients_Pays.List(l - 1)
  8. Print #1, ""
  9. Close #1
  10. oups :
  11. Exit sub ou fonction
  12. Goto retour_code


Message édité par cvb le 13-04-2004 à 14:57:41
n°698329
lhonolulu
Posté le 13-04-2004 à 15:06:29  profilanswer
 

en fait je fait tourner des requetes sql pour beaucoup de clients. Donc c pa gérer les éventuels problème dans les requetes. S'il y a un replace ki a raté a cause d'une otre orthographe ou des truc comme ca.  
Donc s'il y a une erreur je veux qd mm que le programme fasse tourner les autres requetes.

n°698331
cvb
Posté le 13-04-2004 à 15:09:53  profilanswer
 

lhonolulu a écrit :

en fait je fait tourner des requetes sql pour beaucoup de clients. Donc c pa gérer les éventuels problème dans les requetes. S'il y a un replace ki a raté a cause d'une otre orthographe ou des truc comme ca.  
Donc s'il y a une erreur je veux qd mm que le programme fasse tourner les autres requetes.
 

je t'ai donne la gestion des erreurs sous VB et ca marchera  à toutes les erreurs, sauf erreur de ma part.
 
edit : Ton code génére une erreur, si je me trompe pas c'est un code qui permet d'ouvrir un fichier ? tu compte l'avertir d'une erreur d'ouverture ou non et des raisons ?


Message édité par cvb le 13-04-2004 à 15:15:10
n°698380
lhonolulu
Posté le 13-04-2004 à 16:08:42  profilanswer
 

Mon prog tourne en boucle sur tout des clients et sur tout les fichiers de ces clients (une double boucle). Mon code permet de lancer automatiquement toutes les requetes contenu dans les fichiers. avec ta gestion des erreurs je ne retourne pas dans mon code pour faire tourner une autre requete car ton goto me ramène a la gestion des erreurs. et dc mon code s'arrete a la 1ère erreur. C pourquoi dans mon 1er mess j'ai fé un dans mon gestionnair d'erreur un goto pour kil lance les autres requetes.
dans ma gestion des erreur j'ouvr le fichier erreur et je met quelques description de type :
Print #1, "     erreur : " & Err.Number & " - " & Err.Description

n°698385
cvb
Posté le 13-04-2004 à 16:16:22  profilanswer
 

lhonolulu a écrit :

Mon prog tourne en boucle sur tout des clients et sur tout les fichiers de ces clients (une double boucle). Mon code permet de lancer automatiquement toutes les requetes contenu dans les fichiers. avec ta gestion des erreurs je ne retourne pas dans mon code pour faire tourner une autre requete car ton goto me ramène a la gestion des erreurs. et dc mon code s'arrete a la 1ère erreur. C pourquoi dans mon 1er mess j'ai fé un dans mon gestionnair d'erreur un goto pour kil lance les autres requetes.
dans ma gestion des erreur j'ouvr le fichier erreur et je met quelques description de type :
Print #1, "     erreur : " & Err.Number & " - " & Err.Description


 
je te renvoie au code de ton programme avec mon code, le GOTO "retour_code" se positionne avant l'ouverture de ton fichier. Ton code ne gére pas les erreurs ! T'as mise l'étiquette avant l'ouverture de ton fichier ce que je comprends pas trés bien d'allieur ! et à la fin de ton code tu retourne avant le "on error goto"...Bref, c'est un peu si je me permettre de te le dire, folklorique !  Je t'ai mis la gestion des erreurs (1er code) sous Vb et il y en n'as pas 50...
 
Ton code tourne fait tourner en boucle, l'ouverture de ton fichier, pour ça utilse les boucles do While ou for next, mais pas les étiquettes ;)

n°698418
lhonolulu
Posté le 13-04-2004 à 16:47:49  profilanswer
 

mon algo est :
 - sélectionner les clients dont je veux faire une étude
 - Pour chaque client sélectionné j'ouvre 1 à 1 les fichiers texte de ce dossier en les exécutant car se sont des requetes
 - pour chaque requête (or mis les créations de table) je met les résultats dans un fichier excel ou texte automatiquement
 - s'il y a une erreur (faute dans les requetes, trop de ligne pour excel...)j'ouvre mon fichier erreur et je met les caractéristques de l'erreur
 - sur le client où il y a eu l'erreur je passe a un autre fichier de ce client (autre requete) ou à un autre client si ct le dernier fichier.
je ne veux pas gérer les erreurs mais juste dire qu'il y a eu une erreur.
Je fais tourner en boucle l'ouverture et la fermeture de mon fichier "erreur" tant qu'il y a des erreurs.
 en résumé : je fais tourner des requêtes 1 à 1
             s'il y a une erreur dans une requete ou export ou quoi que ce soit je met le descriptif dans mon fichier erreur ensuite je passe a une autre requete.
Mm s'il y a une erreur je repar au tout début de mon prog afin de pouvoir lancer toute mes requetes.
a mon avis on a du mal a se comprendr...lol ! car je ne voi vrémen pas commen dans ton code je fé tourner en boucle mes requetes...je fais juste tourner en boucle mon fichier d'erreur...ce ke je t'accorde est assez folklo
 
 

n°698426
cvb
Posté le 13-04-2004 à 17:05:06  profilanswer
 

lhonolulu a écrit :

mon algo est :
 - sélectionner les clients dont je veux faire une étude
 - Pour chaque client sélectionné j'ouvre 1 à 1 les fichiers texte de ce dossier en les exécutant car se sont des requetes
 - pour chaque requête (or mis les créations de table) je met les résultats dans un fichier excel ou texte automatiquement
 - s'il y a une erreur (faute dans les requetes, trop de ligne pour excel...)j'ouvre mon fichier erreur et je met les caractéristques de l'erreur
 - sur le client où il y a eu l'erreur je passe a un autre fichier de ce client (autre requete) ou à un autre client si ct le dernier fichier.
je ne veux pas gérer les erreurs mais juste dire qu'il y a eu une erreur.
Je fais tourner en boucle l'ouverture et la fermeture de mon fichier "erreur" tant qu'il y a des erreurs.
 en résumé : je fais tourner des requêtes 1 à 1
             s'il y a une erreur dans une requete ou export ou quoi que ce soit je met le descriptif dans mon fichier erreur ensuite je passe a une autre requete.
Mm s'il y a une erreur je repar au tout début de mon prog afin de pouvoir lancer toute mes requetes.
a mon avis on a du mal a se comprendr...lol ! car je ne voi vrémen pas commen dans ton code je fé tourner en boucle mes requetes...je fais juste tourner en boucle mon fichier d'erreur...ce ke je t'accorde est assez folklo
 
 


 
 
Toute erreur fait planter un programme, donc la gestion est obligatoire pour éviter de passer pour un imbécile ! aprés y a des messages ou non, celon les choix que l'on fais ! Dans le code que je te mets c-dessous, même en cas d'erreur, ton code continue à tourner et tu comptabilise les erreurs que t'as eue, c'est ce que je te dis depuis le départ ! Aprés si tu veux détailler les erreurs de chacun c'est plus chiant ;)
 

Code :
  1. Private Sub Command1_Click()
  2. Dim error_1, renvoie1
  3. Dim i As Long
  4. On Error GoTo error_1
  5. renvoie1:
  6.     If i > 0 Then
  7.     MsgBox ("le code est le même ! Vous avez eue " & i & "erreurs ! " )
  8.     Else
  9.     MsgBox ("Vous n'avez pas d'erreur pour le moment!" )
  10.     End If
  11.    
  12. error_1:
  13. Exit Sub
  14. i = i + 1
  15. GoTo renvoie1 'il repart en haut de ton code et comptabilise les erreurs et ton programme plantera pas
  16. End Sub


 

n°698431
drasche
Posté le 13-04-2004 à 17:11:22  profilanswer
 

cvb> pour que ton code soit fiable, il faut l'étiquette initiale avant le on error:

Code :
  1. renvoie1:
  2. On Error GoTo error_1


Parce si ça plante une seconde fois en étant passé une seule fois dans le On Error, ça te ramène dans la fonction parente (et éventuellement la gestion d'erreur par défaut -> crac boum -> fin de programme)
 
Donc, quand une erreur a été déclenchée, puis qu'on veut revenir dans le traitement, il faut repasser par le On Error...


Message édité par drasche le 13-04-2004 à 17:12:21

---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
n°698434
lhonolulu
Posté le 13-04-2004 à 17:12:27  profilanswer
 

c'est ce que g fé...mais ca ne marche qu'une seule fois. la 1ère fois il vb va bien dans le gestionnaire d'erreur mais dés la 2ème fois ca fait comme s'il n'existait pas...

mood
Publicité
Posté le 13-04-2004 à 17:12:27  profilanswer
 

n°698436
drasche
Posté le 13-04-2004 à 17:14:42  profilanswer
 

oui, parce que quand l'erreur est déclenchée, le On Error est oublié, faut repasser dessus (cfr mon précédent post)


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
n°698437
cvb
Posté le 13-04-2004 à 17:15:08  profilanswer
 

drasche a écrit :

cvb> pour que ton code soit fiable, il faut l'étiquette initiale avant le on error:

Code :
  1. renvoie1:
  2. On Error GoTo error_1


Parce si ça plante une seconde fois en étant passé une seule fois dans le On Error, ça te ramène dans la fonction parente (et éventuellement la gestion d'erreur par défaut -> crac boum -> fin de programme)
 
Donc, quand une erreur a été déclenchée, puis qu'on veut revenir dans le traitement, il faut repasser par le On Error...

au temps pour moi !  :jap:  
 

Code :
  1. Dim error_1, renvoie1
  2. Dim i As Long
  3. renvoie1:
  4. On Error GoTo error_1
  5.     If i > 0 Then
  6.     MsgBox ("le code est le même ! Vous avez eue " & i & "erreurs ! " )
  7.     Else
  8.     MsgBox ("Vous n'avez pas d'erreur pour le moment!" )
  9.     End If
  10.    
  11. error_1:
  12. Exit Sub
  13. i = i + 1
  14. GoTo renvoie1 'il repart en haut de ton code et comptabilise les erreurs et ton programme plantera pas


Message édité par cvb le 13-04-2004 à 17:18:56
n°698449
cvb
Posté le 13-04-2004 à 17:26:28  profilanswer
 

lhonolulu a écrit :

c'est ce que g fé...mais ca ne marche qu'une seule fois. la 1ère fois il vb va bien dans le gestionnaire d'erreur mais dés la 2ème fois ca fait comme s'il n'existait pas...
 
 
 


t'as oublié de sortir de la procédure ou de la fonction, avec exit 'sub' ou 'fonction'

Code :
  1. aller :
  2. On Error GoTo oups
  3. ...instructions
  4. oups:
  5. exti sub / function
  6. Open "D:\Stage\Ludovic\erreur.txt" For Append As #1
  7. Print #1, ""
  8. Print #1, "erreur : client " & selection.LstClients_Pays.List(l - 1)
  9. Print #1, ""
  10. Close #1
  11. l = l + 1
  12. GoTo aller


Message édité par cvb le 13-04-2004 à 17:27:24
n°698457
lhonolulu
Posté le 13-04-2004 à 17:28:42  profilanswer
 

déjà esseyé et marche pas...snif.
G fé un pti truc pour tester toutes les possibilités en désespoire de cause.
l = 0
aller: l = l + 1
On Error GoTo oups
If l < 5 Then
    i = 1 / 0
End If
Exit Sub
oups:
    MsgBox ("erreur" )
    GoTo aller
End Sub
 
Mais là oci il ne passe qu'une fois...

n°698468
drasche
Posté le 13-04-2004 à 17:32:50  profilanswer
 

ok j'ai dit une connerie (ce sera pas la dernière [:joce]), en fait c'est pas Goto aller mais Resume aller.


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
n°698472
drasche
Posté le 13-04-2004 à 17:34:00  profilanswer
 

c'est même pire que ça: le Resume ne "casse pas" le On Error, donc le label de début peut aussi bien se trouver après [:wam]


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
n°698485
lhonolulu
Posté le 13-04-2004 à 17:39:53  profilanswer
 

bien joué matrix ! lol ! merci ca marche enfin ! je t'aime toi ! lol !
merci a toi et à cvb
donc si on veut gérer plusieurs à la suite (sans exit) il faut utiliser resume. je m'en souviendrai.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [résolu] gestion d'erreurs

 

Sujets relatifs
[résolu] changer de répertoire dans une dirlistbox[résolu tout seul] Problème avec Gtk => ** (Test Gtk.exe:1144):
[servlets]sessions avec j2se1.3.1[resolu]Numéro de ligne [Résolu]
Une servlet qui met à jour un formulaire [résolu][resolu tout seul ^^] Probleme avec socket & printf
[PHP] comment stopper l'éxecution d'un script ??? [résolu : exit()][SQL] [Résolu] Requete avec COUNT et GROUP BY
Upload de fichier (probleme résolu :D)Wait () et gestion des signaux
Plus de sujets relatifs à : [résolu] gestion d'erreurs


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR