Как используется строка подключения при подключении к AD с помощью ADsDSOObject?

#delphi #ado

#delphi #ado

Вопрос:

Недавно я перенял некоторый код Delphi (это Delphi 5, но я не думаю, что это важно), который запрашивает AD с использованием LDAP. Код довольно запутанный, потому что он содержит как строку подключения, так и непосредственно заданные свойства. Есть программа установки, в которой вводится ряд параметров AD. Какие части кода являются релевантными, а какие части я могу вырезать? Мне особенно интересно, есть ли ненужные вопросы в программе установки.

  • Можно ли упростить код? (т.Е. Используется ли ConnectionString (или любой из содержащих параметров) в этом коде?)
  • Используются Data Source ли (задаются как ADserver в программе установки) или Location (задаются как ADlocation в программе установки) в вызове для открытия или выполнения?

Я попытался удалить либо aADOconnection.provider:='ADsDSOObject'; или строку подключения, и вызов работает. Когда я удалил как код для настройки поставщика, так и ConnectionString , вызов, конечно, не удался. Этот фрагмент кода предназначен для проверки соединения с AD, существует аналогичный (но более длинный) блок кода для запроса групп для пользователя.

 Connecstr_S:='Provider=ADsDSOObject;Encrypt Password=False;Data Source=' 
  Tsystem.programsettings.sADserver ';Location=' 
  Tsystem.programsettings.sADlocation ';Mode=Read;Bind Flags=0;ADSI Flag=-2147483648';
aADOconnection:=TADOConnection.create(nil);
aADOcmd:=TADOCommand.create(nil);
aADOconnection.loginprompt:=false;
aADOconnection.commandtimeout:=30;
aADOconnection.connectoptions:=coConnectUnspecified;
aADOconnection.CursorLocation:=cluseclient;
aADOconnection.isolationlevel:=ilCursorStability;
aADOconnection.mode:=cmunknown;
aADOconnection.provider:='ADsDSOObject';
aADOcmd.commandtype:=cmdUnknown;
aADOcmd.Paramcheck:=false;
aADOcmd.commandtimeout:=30;
aADOcmd.Prepared:=false;
aADOconnection.ConnectionString:=Connecstr_S;
aADOcmd.Connection:=aADOconnection;
aADOconnection.open;
result:=true;
try
  SQL:='select displayname from ' quotedstr('LDAP://' Tsystem.programsettings.sADbaseDN) 
    ' where  ' Tsystem.programsettings.sADuseridAttribute '=' quotedstr('aaaaaaa');
  aADOcmd.CommandText:=SQL;
  t:=aADOcmd.Execute;
except
  On E:EOleException do result:=false;  //network connection probably missing
end;
aADOconnection.close;
aADOcmd.free;
aADOconnection.free;