gpt4 book ai didi

delphi - ADODB 组件导致 Win7/Server 2008 上的访问冲突

转载 作者:行者123 更新时间:2023-12-03 15:50:27 24 4
gpt4 key购买 nike

我有一段用 Delphi 2005 编写的代码,用于在 LDAP 中搜索用户的特定属性。当它在 Windows 7 或 Server 2008 上运行时,我遇到访问冲突,但在 XP 或 2003 上则没有。

Function IsSSOUser(UserId: String): Boolean;
var
S : string;
ADOQuery : TADOQuery;
ADOConnectionSSO: TADOConnection;
begin
result := false;
Setdomainname;
ADOQuery := TADOQuery.Create(nil);
ADOConnectionSSO := TADOConnection.Create(nil);
try
ADOConnectionSSO.LoginPrompt := false;
ADOConnectionSSO.Mode := cmRead;
ADOConnectionSSO.Provider := 'ADsDSOObject';
ADOQuery.Connection := ADOConnectionSSO;
ADOQuery.ConnectionString := 'Provider=ADsDSOObject;Encrypt Password=False;Mode=Read;Bind Flags=0;ADSI Flag=-2147483648';
ADOQuery.SQL.Clear;
try
S := 'SELECT AdsPath, CN, SN, SSOguid FROM '''
+ LDAPString + ''' WHERE objectClass=''user'' and CN = ''' + UserId + ''' ';
ADOQuery.SQL.Add(S);
ADOQuery.Open;
ADOQuery.ExecSQL;
if trim(ADOQuery.FieldByName('SSOguid').AsString) = '' then
result := false
else
result := true;
except
on e:Exception do
if e.ClassType <> EOleException then
Showmessage(format('[%s] Exception in IsSSOUser: [%s]',[e.ClassType.ClassName, e.Message]));
end;
finally
ADOQuery.Close;
ADOConnectionSSO.Close;
ADOQuery.free;
ADOConnectionSSO.free;
end;
end;

此代码在 Windows XP 和 Windows Server 2003 上运行良好,但在 Windows 7 和 Server 2008 上都出现访问冲突。我在网上看到许多关于 ADODB 接口(interface)的更改如何破坏下游操作系统上的内容的线程,但是我似乎遇到了相反的问题。我在 Windows 7 计算机上进行构建,代码仅适用于以前版本的 Windows。

最佳答案

您必须添加

AdoQuery.ParamCheck := false;

在你之前

ADOQuery.SQL.Add(S);

因为您的 LDAPString 可能包含冒号 (:),例如。 "LDAP://...." 这会导致查询尝试为其创建参数对象。此外,在 ADOQuery.Open 之后不需要 ADOQuery.ExecSQL

关于delphi - ADODB 组件导致 Win7/Server 2008 上的访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15103180/

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