IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBScript Discussion :

Requête et Extraction LDAP en VBA


Sujet :

VBScript

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2020
    Messages : 3
    Par défaut Requête et Extraction LDAP en VBA
    Bonjour,

    Je commence sur VBA et j'aimerais extraire des informations depuis un LDAP (serveur LDAP différent d'un contrôleur de domaine AD). J'arrive à me connecter mais j'ai un problème avec mon recordset pour extraire les données.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
    Sub Extract_LDAP()
    Dim objConnection, objCommand, objRecordSet, objFSO, objF
    Dim sName, strPath, strName, strManager, StrTmp
    Const ADS_SCOPE_SUBTREE = 2
    Const ForReading = 1, ForWriting = 2, ForAppending = 8
    Set objFSO = CreateObject("Scripting.FileSystemObject")
     
    strName = "output.csv"
    strPath = ".\"
    If (objFSO.FileExists(strPath & strName)) Then
    objFSO.DeleteFile strPath & strName
    End If
    Set objF = objFSO.CreateTextFile(strPath & strName)
    objF.Close
    Set objF = objFSO.openTextFile(strPath & strName, ForAppending)
     
    sUser = "admin"
    sDN = "cn=" & sUser & ",dc=company,dc=com"
    sRoot = "LDAP://127.0.0.1:1389/dc=company,dc=eu"
     
    Dim oDS: Set oDS = GetObject("LDAP:")
    Dim oAuth: Set oAuth = oDS.OpenDSObject(sRoot, sDN, "password", 0)
     
    Set objConnection = CreateObject("ADODB.Connection")
    Set objCommand = CreateObject("ADODB.Command")
    objConnection.Provider = "ADsDSOObject"
    objConnection.Open "Active Directory Provider", sDN, "password"
    Set objCommand.ActiveConnection = objConnection
     
    objCommand.Properties("Page Size") = 100
    objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
     
    objCommand.CommandText = "SELECT attribut1,attribut2 FROM 'LDAP://127.0.0.1:1389/OU=people,dc=company,dc=com'" & "WHERE objectClass='person'"
    Set objRecordSet = objCommand.Execute
     
    objCommand.Properties("Page Size") = 1000
    objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
    Set objRecordSet = objCommand.Execute
    objRecordSet.MoveFirst
     
    Do Until objRecordSet.EOF
    sName = objRecordSet.Fields("attribut1").Value
     
    strDescription = ""
    If Not (IsNull(objRecordSet.Fields("attribut2").Value)) Then
    For Each StrTmp In objRecordSet.Fields("attribut2").Value
    strManager = StrTmp
    Next
    End If
     
    objF.WriteLine (sName & ";" & strManager)
    objRecordSet.MoveNext
    Loop
    objF.Close
     
    End Sub
    L'erreur pointe sur la ligne suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    For Each StrTmp In objRecordSet.Fields("attribut2").Value

  2. #2
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 127
    Par défaut
    Salut

    Je commence sur VBA
    ce que tu nous montres n'est pas du VBA mais du VBScript, donc dans le bon forum.

    Un For Each variable in .... parcours une collection, objRecordSet.Fields("attribut2").Value, n'est pas une collection/tableau, objRecordSet.Fields("attribut2") doit être employé pour parcourir l'ensemble des enregistrements.

    En lisant ton code je ne comprends pas ton algo:
    pourquoi ne pas faire simplement strManager = objRecordSet.Fields("attribut2").value ?, pourquoi tentes tu de passer par une boucle.
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  3. #3
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 127
    Par défaut
    Re

    Autre chose, ta ligne 35 et inutile, la ligne 39 est suffisante.

    Ta boucle Do .... Loop je la verrai mieux comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Do Until objRecordSet.EOF
    	sName = objRecordSet.Fields("attribut1").Value
    	If Not (IsNull(objRecordSet.Fields("attribut2").Value)) Then
    		strManager = "Non renseigné"
    		Else		
    		strManager = objRecordSet.Fields("attribut2").Value
    	End If
    	objF.WriteLine (sName & ";" & strManager)
    	objRecordSet.MoveNext
    Loop
    strDescription supprimé ainsi que la boucle For Each (posant problème).
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  4. #4
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    Juillet 2009
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 420
    Par défaut
    N'est-ce pas l'inverse qu'il fallait dans les lignes 3 à 7 ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If IsNull(objRecordSet.Fields("attribut2").Value) Then        
         strManager = "Non renseigné"
    Else        
         strManager = objRecordSet.Fields("attribut2").Value     
    End If
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA) et Ne jamais typer variables et/ou fonctions en VBS.
    Vous pouvez consulter mes contributions
    Ne pas oublier de consulter les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

  5. #5
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 127
    Par défaut
    Salut l_autodidacte

    Je viens de vérifier, tu m'as donné le doute
    Citation Envoyé par Script56.CHM
    Renvoie une valeur booléenne indiquant si une expression contient des données valides ou non (Null).

    IsNull(expression)
    L'argument expression représente toute expression.

    Notes
    La fonction IsNull renvoie la valeur True si l'argument expression est Null, autrement dit s'il ne contient aucune donnée valide ; dans le cas contraire, la fonction IsNull renvoie la valeur False.
    Motif de l’édit:
    Tu as raison l_autodidacte.
    Mea-culpa, dans ma proposition, je n'ai pas vue le Not, Copier/Coller rapide à partir du code posté par flacko_, désolé
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2020
    Messages : 3
    Par défaut
    Merci à vous deux!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Requête SQL Direct à partir de VBA
    Par petitmic dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 25/05/2007, 17h35
  2. requête d'extraction sur le nom égal à des caractères numériques
    Par bouba_95 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 10/01/2007, 16h58
  3. Problèmes avec Requêtes d'extraction 2
    Par NoBru dans le forum Access
    Réponses: 4
    Dernier message: 06/06/2006, 22h05
  4. Problèmes avec Requêtes d'extraction
    Par NoBru dans le forum Access
    Réponses: 3
    Dernier message: 03/06/2006, 15h25
  5. requête d'extraction de lieux (st et saint)
    Par sdchamplas dans le forum Langage SQL
    Réponses: 8
    Dernier message: 20/02/2003, 11h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo