[VB6] Problème Gestion d'erreur

Fermé
Korangar Messages postés 9 Date d'inscription vendredi 25 avril 2008 Statut Membre Dernière intervention 15 novembre 2008 - 22 oct. 2008 à 09:50
 toto - 23 oct. 2008 à 15:24
Bonjour,
Le but du script est de récupérer les comptes administrateurs des machines d'un domaine dans un fichier texte.
J'ai récupéré la majeur partie du code source sur le site de microsoft, cependant il ne gère pas deux problèmes concernant la récupération à savoir "Erreur 70: Accès refusé" et "Erreur -2147024843: Chemin Réseau introuvable".

J'ai tenté de gérer l'erreur de cette façon, mais lors de l'execution le "On Error Go To Erreur" est ignoré. Lors de l'execution manuelle, si je reviens sur la condition "If Err.Number <> 70 And Err.Number <> -2147024843 Then", le bloc est bien ignoré.

J'utilise VB6 SP6

Serait il possible d'avoir de l'aide sur ce problème ?
Merci d'avance.


Private Sub recuperation_Click()


Open "C:\sauvegarde.txt" For Append As #1

Const ADS_SCOPE_SUBTREE = 2

Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"

Set objCommand.ActiveConnection = objConnection
objCommand.CommandText = _
    "Select Name, Location from 'LDAP://DC=mondomaine,DC=com' " _
        & "Where objectClass='computer'"
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst

Do Until objRecordSet.EOF
 
    strComputer = objRecordSet.Fields("Name").Value
    strGroup = "Administrateurs"
    resultat = resultat & objRecordSet.Fields("Name").Value & ";"
Erreur:
    Err.Clear
    If Err.Number <> 70 And Err.Number <> -2147024843 Then
        On Error GoTo Erreur
        Set objGroup = GetObject("WinNT://" & strComputer & "/" & strGroup & ",group")
        
        For Each objMember In objGroup.Members

            resultat = resultat & objMember.Name & ";"

        Next
    End If

    Print #1, resultat
    
    resultat = ""
    objRecordSet.MoveNext

Loop



resultat.Caption = "Récupération Terminée"


Close

End Sub
A voir également:

3 réponses

Korangar Messages postés 9 Date d'inscription vendredi 25 avril 2008 Statut Membre Dernière intervention 15 novembre 2008 2
23 oct. 2008 à 07:22
Bonjour,

Je me permets de vous relancer car ce problème m'enquiquine et que je n'ai toujours pas trouvé de réponse.

Merci d'avance
1
OOOPS ! moi aussi j'ai mis mon Erreur: et son traitement au mauvais endroit. Ils devraient être à la fin du sub, après un exit sub pour éviter leur exécution quand il n'y a pas d'erreur
1
Bonjour
If Err.Number <> 70 And Err.Number <> -2147024843 Then
Ce test est inutile : il est toujours vrai après un Err.clear

Ton traitement d'erreur n'est pas conventionnel. Normalement, chaque appel à On Error goto ne doit être exécuté qu'une fois, ou 'refermé' par un appel à On Error goto 0, et le traitement correspondant au cas d'erreur se trouver dans un bloc séparé.
( pas testé)
...
Err.Clear
Do Until objRecordSet.EOF
 
    strComputer = objRecordSet.Fields("Name").Value
    strGroup = "Administrateurs"
    resultat = resultat & objRecordSet.Fields("Name").Value & ";"
    On Error GoTo Erreur
    Set objGroup = GetObject("WinNT://" & strComputer & "/" & strGroup & ",group")
    On Error goto 0
     For Each objMember In objGroup.Members
        resultat = resultat & objMember.Name & ";"
    Next
    End If

    Print #1, resultat
Suite:    
    resultat = ""
    objRecordSet.MoveNext
Erreur:
  If Err.Number = 70 OR Err.Number = -2147024843 Then resume Suite ' erreurs attendues
  Msgbox "Erreur " & Err.Number & " : " & Err.Description 'erreurs innattendues
  End
Loop



resultat.Caption = "Récupération Terminée"


0