#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;