假设我有以下LDAP查询:
Base DN: OU=Groups,DC=office,DC=domain,DC=org
Filter: (member:1.2.840.113556.1.4.1941:=CN=adam smith,OU=Users,DC=office,DC=domain,DC=org)
如何在Delphi(2007)下执行它?使用ADO的示例似乎具有SQL的语法,我现在不怎么转换它?
最佳答案
在Delphi中,可以使用两种方式获取数据:
您描述的“ SQL”式语法-基本上是对Active Directory的ADO访问。如果您具有SQL背景,那很容易,但是它在某些方面也受到限制(例如,您无法获得多值属性等)。您可以在Richard Mueller的网站上找到一些Search Tips on ADO(AD编程MVP)
导入ActiveDs.tlb类型库,并使用ADSI提供的COM接口(最著名的IDirectorySearch
)进行搜索。这是一个比较杂乱的COM界面,这可能就是为什么大多数人倾向于使用更容易接近的ADO搜索内容的原因
回到我仍在编写Delphi时,我做了很多Active Directory的工作,并提供了一些我的Delphi / AD技巧和一些示例代码onto my site。它已经有一段时间没有更新了:-(但是,您(和其他Delphites)可能对ADSISearch组件感兴趣
更新:您可以在TADOCommand中尝试此“ SQL ish”语句吗?
SELECT sAMAccountName, displayName
FROM 'LDAP://OU=Groups,DC=office,DC=domain,DC=org'
WHERE objectCategory='group'
AND member:1.2.840.113556.1.4.1941:=(CN=adam smith,OU=Users,DC=office,DC=domain,DC=org)