【问题标题】:Excel VBA - LDAP Active Directory request with string concatenationExcel VBA - 带有字符串连接的 LDAP Active Directory 请求
【发布时间】:2019-09-11 02:54:48
【问题描述】:

我正在尝试从我们公司的 Active Directory 中查找我在 Excel 2016 中编写的工具的联系人属性。当用户提供电子邮件地址或全名 (@987654321) 时,该程序应该能够执行数据库查找@) - 随心所欲。

这适用于电子邮件地址和其他在数据库中与用户提供的语法相同的属性。不幸的是,数据库没有以我需要的格式存储全名,即FIRSTNAME LASTNAME

所以我想我必须告诉请求还返回属性 givennamesn 的匹配项,因为它们构成了所需的全名。

为了做到这一点,我尝试了以下连接属性“givenname”和“sn”的方法。他们都没有工作:

  1. 在我添加的 SQL 的WHERE 子句中:

    ' OR givenname & " " & sn = '" & Trim(rng.Text) & "'
    (see code snippet below)
    
  2. 在 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
    

似乎不完全支持 LDAP 请求中使用的 SQL。因为我什至不能创建别名。我也不能在 SQL 命令中使用方括号或函数,例如 CONCAT()

每次我尝试其中一种方法时都会出现 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
' ...

【问题讨论】:

    标签: sql excel vba ldap string-concatenation


    【解决方案1】:

    我终于以我希望可以避免的方式解决了它。它当然不是传统的,也不是有效的,但它解决了问题。我编写了一个函数,可以将SearchString 转换为数据库支持的格式。

    如果有人对此有更好的方法,请随时发布。

    【讨论】:

    • 您能否编辑答案以包含新函数中的代码?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-12
    • 2013-01-26
    • 1970-01-01
    • 1970-01-01
    • 2016-08-08
    相关资源
    最近更新 更多