Я недавно взял некоторый код Delphi (это Delphi 5, но я не думаю, что это важно), который запрашивает AD с использованием LDAP.Код довольно запутанный, потому что он содержит как ConnectionString, так и непосредственно установленные свойства.Там есть программа установки, в которую вводится ряд параметров AD.Какие части кода актуальны, а какие можно вырезать?Мне особенно интересно, есть ли в программе установки ненужные вопросы.
- Можно ли упростить код?(т.е. имеет ли ConnectionString (или любой из содержащихся в ней параметров) какое-либо использование в этом коде?)
Data Source
(задано как ADserver в программе установки) или Location
(задано как ADlocation в программе установки)используется в вызове Open или Execute?
Я попытался удалить либо aADOconnection.provider:='ADsDSOObject';
, либо ConnectionString, и вызов работает.Когда я удалил и код для настройки провайдера, и 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;