LDAPダイアレクト

LDAPダイアレクトは、LDAP検索フィルタ構文を使用するクエリステートメントの形式です。 LDAPクエリステートメントは、次のADSI検索インターフェイスで使用します。

  • ActiveX Data Object (ADO) インターフェイス。OLE DBを使用するオートメーションインターフェイスです。
  • OLE DBデータベースのクエリを実行するためのC/C++インターフェイスのセットです。
  • IDirectorySearch。Active DirectoryのC/C++インターフェイスです。

LDAP言語文字列は、セミコロン()で区切られた4つの部分で構成されます。ベース識別名。

  • ベース識別名。 次に例を示します。

    <LDAP://DC=Fabrikam,DC=COM>
    
  • LDAP検索フィルター。 検索フィルターの詳細については、検索フィルターの構文 を参照してください。

  • 取得する属性のLDAP表示名。 複数の属性はコンマで区切ります。

  • 検索の範囲を指定します。 有効な値は、"base"、"onelevel"、および"subtree"です。 LDAPクエリ文字列で指定された範囲は、ADO Commandオブジェクトの"SearchScope"プロパティで指定された検索範囲よりも優先されます。

サブツリー内のすべてのオブジェクトを検索するADSIのLDAP言語のコード例を次に示します。

"<LDAP://DC=Fabrikam,DC=com>;(objectClass=*);AdsPath, cn;subTree"

すべての検索オプション(例えば検索ページサイズ)をLDAP言語で表現できるわけではないため、実際のクエリの実行を開始する前にオプションを設定する必要があります。

LDAPクエリを実行するためのコード例

次のコード例は、LDAPクエリの使用方法を示しています。

Dim con As New Connection, rs As New Recordset
Dim adVariant
Dim i 'Used for counter
Dim j 'Used for counter
Dim Com As New Command
Dim strDomain As String
Dim strPassword As String
 
' Open a Connection object.
con.Provider = "ADsDSOObject"
con.Properties("ADSI Flag") = 1
con.Properties("User ID") = strDomain + "\" + strUserID
con.Properties("Password") = strPassword

con.Open "Active Directory Provider"
 
' Create a command object on this connection.
Set Com.ActiveConnection = con
 
' Set the query string.
Com.CommandText = "<LDAP://MyServer/DC=MyDomain,DC=Fabrikam,DC=com>;
     (objectClass=*);ADsPath, objectclass;base"
 
' Set search preferences.
Com.Properties("Page Size") = 1000
Com.Properties("Timeout") = 30 'seconds
 
' Execute the query.
Set rs = Com.Execute
 
' Navigate the record set.
rs.MoveFirst
While Not rs.EOF
    For i = 0 To rs.Fields.Count - 1
        If rs.Fields(i).Type = adVariant And Not (IsNull(rs.Fields(i).Value)) Then
            Debug.Print rs.Fields(i).Name, " = "
            For j = LBound(rs.Fields(i).Value) To UBound(rs.Fields(i).Value)
                Debug.Print rs.Fields(i).Value(j), " # "
            Next j
        Else
            Debug.Print rs.Fields(i).Name, " = ", rs.Fields(i).Value
        End If
    Next i
    rs.MoveNext
Wend
 
rs.MoveLast
Debug.Print "No. of rows = ", rs.RecordCount

クエリ構文の詳細については、 検索フィルター構文を参照してください。

検索フィルター構文

SQL方言

IDirectorySearchインターフェイスを使用した検索

ActiveXデータオブジェクトを使用した検索

OLE DBを使用した検索