1

VBA を使用して Excel から LDAP をクエリしようとしています。OR キーワードを使用して CN でレコードをフェッチしている場合は問題なく動作しますが、IN キーワードを使用すると失敗します。

失敗 (エラー 80040e14):

Function GetUsersProperty(ByVal users As String, ByVal returnField As String)

    Dim usersProperty As New Collection

    Set cmd = CreateObject("ADODB.Command")
    Set cn = CreateObject("ADODB.Connection")
    Set rs = CreateObject("ADODB.Recordset")

    cn.Open "Provider=ADsDSOObject;"

    cmd.CommandText = _
        "SELECT cn, " & returnField & _
        " FROM 'LDAP://" & GetObject("LDAP://RootDSE").get("defaultNamingContext") & _
        "' WHERE objectClass = 'User' AND objectCategory = 'Person' AND cn IN (" & users & ")"
        'assuming there are multiple users names in colons inside 'users' separated with comma

    cmd.ActiveConnection = cn

    Set rs = cmd.Execute

    'On Error Resume Next
    While rs.EOF <> True And rs.BOF <> True
        usersProperty.Add Item:=rs.Fields(returnField).Value, Key:=rs.Fields("cn").Value
        rs.MoveNext
    Wend

    Set GetUsersProperty = usersProperty

    Set cmd = Nothing
    Set cn = Nothing
    Set rs = Nothing

End Function

WHEREcmd.CommandTextを次のように置き換えると機能します

        "' WHERE objectClass = 'User' AND objectCategory = 'Person' AND (cn = " & user1 & " OR cn = " & user2 & ")"

問題は、理解しやすく、リストの作成が容易なため、何を IN に使用するかということです。そうすることは可能ですか?

4

1 に答える 1

0

私の質問に対する答えが見つかりました - LDAP アーキテクチャの制限により、実行したいアクションは実行できません。

LDAP にクエリを実行するときに予期しないことを説明した非常に優れた記事があります: http://mysqldump.azundris.com/archives/74-LDAP-is-not-relational.html

于 2013-07-14T14:47:14.093 に答える