Я пытаюсь запросить LDAP из Excel с помощью VBA. Это хорошо работает, когда я выборку записей по CN, используя ключевое слово OR, но с ключевым словом IN это не удается:Использование ключевого слова IN в запросах для LDAP (VBA)
Сбой (ошибка 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
работы, если я заменю WHERE
под cmd.CommandText
с
"' WHERE objectClass = 'User' AND objectCategory = 'Person' AND (cn = " & user1 & " OR cn = " & user2 & ")"
Проблема в том, что я, что использовать IN из-за более легкого понимания и упрощения составления списка. Можно ли это сделать?
Я не думаю, что проблема VBA связаны. Поскольку ваш код компилируется и выполняется, в коде нет ничего плохого. Если это не работает, как ожидалось, это другая проблема, но вы тоже не сталкиваетесь с этим. Я рекомендую вам ознакомиться с оператором [IN] (http://www.w3schools.com/sql/sql_in.asp) как часть SQL-запроса. –
Спасибо, мне. Использование оператора IN верное, насколько я могу видеть. Проблема в том, что команда 'cmd.Execute' не принимает ее, и я не знаю, как это сделать. –