簡體   English   中英

ADODB組件導致Win7 / Server 2008上的訪問沖突

[英]ADODB component causes access violation on Win7/Server 2008

我有一段用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接口的更改如何破壞下游操作系統上的內容,但我看似有相反的問題。 我正在構建一台Windows 7計算機,該代碼僅適用於以前版本的Windows。

你必須添加

AdoQuery.ParamCheck := false;

在你之前

ADOQuery.SQL.Add(S);

因為你LDAPString 5月包含冒號( : )如。 "LDAP://...."導致查詢嘗試為其創建參數對象。 此外,在ADOQuery.ExecSQL之后不需要ADOQuery.Open

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM