gpt4 book ai didi

vba - 具有特殊字符 "/"的对象在 GetObject 中产生自动化错误

转载 作者:行者123 更新时间:2023-12-04 10:47:05 29 4
gpt4 key购买 nike

我们有一个旧的 Microsoft Access 字体端,用作我们用户数据库的 GUI。我从来都不是一个 VBA 人,所以当我修复我正在学习的错误时。

我们的 Access DB 有许多命令可以将信息同步到 Active Directory。一个这样的命令是将用户添加到组中。但是,只要组包含 /永远不会添加该组。

调试将其生成为:

Run-time error -2147463168 (80005000)': Automation Error".



打印出目标组会按我的预期显示 DN。试图逃离 /在 GetObject 没有帮助并导致其自身的身份验证错误之前。

这是函数的顶部 -
Function AddGroup(TargetGroup, strUserID, Optional strOptReqBy)
Dim objDL
Set objUser = GetObject("LDAP://" & GetDName(CStr(strUserID)))

Set objDL = GetObject("LDAP://" & TargetGroup)
On Error Resume Next
objDL.Add (objUser.ADsPath)
objDL.SetInfo
On Error GoTo 0

如果组不包含 /,这将正常工作。 .
调试指向 Set objDL = GetObject("LDAP://" & TargetGroup)
寻找有关为什么会发生这种情况的一些输入。谢谢!

最佳答案

在 LDAP 路径中,/是分隔符。不仅是//在开头附近使用,但您也可以指定要连接的服务器,后跟 / ,然后是对象的 DN,如下所示:

LDAP://example.com/DC=example,DC=com

如果您运行它的计算机未加入与您连接的域相同的(或受信任的)域,则这是必要的。

这意味着如果您要绑定(bind)的对象的 DN 具有 / ,它会认为 / 之前的所有内容是要连接的服务器,它会爆炸。

所以你只需要逃避它,正如你已经了解到的,这是通过 \ 完成的。 :
LDAP://OU=This\/That,DC=example,DC=com

所以,是的,一个简单的替换就可以了:

Set objUser = GetObject("LDAP://" & Replace(GetDName(CStr(strUserID)), "/", "\/")

不要心情不好。甚至微软 has this bug in their code .

关于vba - 具有特殊字符 "/"的对象在 GetObject 中产生自动化错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59652909/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com