Problème lecture d'un recordset

Signaler
Messages postés
37
Date d'inscription
lundi 24 mars 2003
Statut
Membre
Dernière intervention
22 septembre 2010
-
Messages postés
37
Date d'inscription
lundi 24 mars 2003
Statut
Membre
Dernière intervention
22 septembre 2010
-
Bonjour,
Je développe actuellement une application qui doit lire un annuaire LDAP (Novell) et récupérer certaines données utilisateurs.
Je me connecte sur le LDAP via ADODB.

Lors de mes tests j'ai un problème car j'essaye d'afficher le nom et l'email mais si l'email n'existe pas pour l'un des utilsiateurs j'ai une erreur :
erreur d'exécution 13 : type incompatible. Sur la ligne en gras
Ma question est que je ne sais pas ce qui est retourné par la requête.
Il semble s'agir d'un tableau. Est-ce quelqu'un a une idée à ce sujet ?
D'avance merci.

Private Sub Command1_Click()

Dim conn As ADODB.Connection '****
Dim rsSource As ADODB.Recordset '****
Dim mail,sn

AdresseIpSource = "x.x.x.x"
DnSourceLdap = "o=toto"
filtreLdapSource = "(objectClass=user)"

Set conn = New ADODB.Connection
conn.Provider = "ADSDSOObject"

conn.Properties("User ID") = "cn=admin,o=toto"
conn.Properties("Password") = "tototutu"
conn.Open "ADs Provider"

' Connexion à la base Source
mess = "<LDAP://" & AdresseIpSource & "/" & DnSourceLdap & ">;" & filtreLdapSource & ";mail,sn;subtree"

Set rsSource = conn.Execute(mess)

rsSource.MoveFirst
Do Until rsSource.EOF
mail= rsSource.Fields(0).Value
sn = rsSource.Fields(1).Value

If sn(0) <> "" Then
Debug.Print " " & sn(0)
End If

If mail(0) <> "" Then
Debug.Print " " & mail(0)
End If

rsSource.MoveNext
Loop

End Sub


Jujunio

2 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
80
Salut
Un champ contenant Null de SQL n'est pas la même chose que vbNullString ("")

Il faut d'abord tester que le champ n'est pas Null, puis tester s'il renferme quelque chose, les deux possibilités existant :
    If Not IsNull(mail(0)) Then
        If mail(0) <> "" Then
            Debug.Print mail(0)
        End If
    End If

Tu peux aussi, dans ta requète SQL, utiliser les commandes SQL pour transformer les champs Null en une chaine reconnaissable ensuite :
Select IsNull(monChamp, '(vide)') monChamp
Le nom du champ est répété pour donner un nom au 'calcul IsNull', sinon, le nom du champ disparait (mais comme tu ne sembles pas les utiliser ...)

D'autre part, je suis étonné que tu stockes une valeur dans une variable nommée 'mail' et que tu utilises ensuite 'mail(0)'
Idem pour 'sn' et 'sn(0)'
mail ou sn n'étant pas dimensionnés formellement, c'est la porte ouverte à toutes les interprétations.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
37
Date d'inscription
lundi 24 mars 2003
Statut
Membre
Dernière intervention
22 septembre 2010

Merci Jack pour ta réponse.
Grâce à ta réponse j'ai pu avancer un peu. Voici où j'en suis :

...
If IsNull(rsSource.Fields(1).Value) Then
  vAttr1Source = " "
Else
  vAttr1Source = rsSource.Fields(1).Value
  stringValue = stringValue & " " & vAttr1Source
End If
...


Sauf que pour certains champs que je récupère, pour les écrire dans une chaine de caractère par exemple, je suis obligé de rajouter value(0) comme l'exemple ci-dessous :
 vAttrXSource = rsSource.Fields(X).Value(0)

ou
 vAttrXSource = rsSource.Fields(X).Value


sinon j'ai encore une erreur erreur d'exécution 13 : type incompatible


Jujunio