Я пытаюсь найти атрибуты контактов из нашей компании Active Directory для инструмента, который пишу в Excel 2016. Программа должна иметь возможность выполнять поиск в базе данных, когда пользователь указывает адрес электронной почты или полное имя (FIRSTNAME LASTNAME
) - все, что они хотят.
Это прекрасно работает для адресов электронной почты и других атрибутов, которые синтаксически совпадают в базе данных, предоставленной пользователем.К сожалению, база данных не хранит полное имя в нужном мне формате, который равен FIRSTNAME LASTNAME
. Поэтому я решил, что должен сказать запросу также возвращать совпадения для атрибутов givenname
и sn
потому что они составляют желаемое полное имя.
Чтобы сделать это, я попробовал следующие способы объединения атрибутов «указанное имя» и «sn».Ни один из них не работал:
в предложении SQL WHERE
, которое я добавил:
' OR givenname & " " & sn = '" & Trim(rng.Text) & "'
(see code snippet below)
В разделе SQL SELECT
,Я протестировал несколько способов создания псевдонима:
* ([givenname] || [sn]) As myfullname
* ([givenname] + [sn]) As myfullname
* ([givenname] & [sn]) As myfullname
* and all of the above without square brackets and round brackets
Похоже, что SQL, используемый в запросах LDAP, не полностью поддерживается.Потому что я даже не могу создавать псевдонимы.Я также не могу использовать квадратные скобки или функции, такие как CONCAT()
в команде SQL.
Каждый раз, когда я пробовал один из способов, я получал ошибку vba:
По крайней мере, одна ошибка возникала
(перевод с немецкого на английский)
В других реализациях SQL (не в VBA) это givenname & " " & sn
прекрасно работает.
Вопрос : Как выполнить запрос, проверяющий мой SearchString
против объединения атрибутов givenname
(имя) и sn
(фамилия) с пробелом между ними?
' Connect to active directory
Set objDSE = GetObject("LDAP://rootDSE")
Set objConnection = CreateObject("ADODB.Connection")
objConnection.Provider = "ADsDSOObject"
objConnection.Open
Set objCommand = CreateObject("ADODB.Command")
Set objCommand.ActiveConnection = objConnection
SearchString = "Max Mustermann"
' Contact lookup using SQL-query
objCommand.CommandText = _
"SELECT givenname, sn, mail, telephoneNumber, mobile, mailNickName, c, l, postalCode, department, company, streetAddress " & _
"FROM 'LDAP://" & objDSE.Get("defaultNamingContext") & "' " & _
"WHERE objectCategory='person' AND (mail = '" & SearchString t & "' OR givenname & sn = '" & SearchString & "')"
Set objRecordset = objCommand.Execute
If Not objRecordset.EOF Then
' Further processing which is not relevant to the question
' ...