-
Через ADO получаю данные из Acrive Directory таким образом:
AdoQuery1.SQL.Text := ...;
AdoQuery1.Parameters.ParamByName(...).Value := ...;
AdoConnnection1.Connected := True;
AdoQuery1.Open;
На последней строке (точнее, при Recordset.Open в модуле ADODB) возникает EOleException: "Интерфейс не поддерживается" (именно на русском языке). При этом программа не вылетает, а вполне правильно работает (хотя перехвата исключений в ней нет). Никто не сталкивался с таким безобразием? Хочется же избежать ошибок, а не получается.
-
вместо AdoQuery1 AdoCommand и работать(понимать что пришло) с полученными данными самому... там фигня в том что вместо рекордсета приходит простое текстовое сообщение, об ошибке например в самом AD, что естественно никоим боком не интерфейс от рекордсета, но и эксепт, т.к. все типа нормально отработало... а то, что вы там ожидаете не то что мы посылает, это ваши проблемы.
-
Справился на основе долгого гугления. Делюсь - может, кому пригодится...
1. Убрал параметры, подставив их значения в текст запроса. 2. Отключил ParamCheck.
И заработало как надо.
-
Вообще, в модуле ADODB для D7 явный баг (слева - номера строк).
2363 OLEDBCommand.QueryInterface(ICommandWithParameters, OLEDBParameters); 2364 OLEDBParameters.SetParameterInfo(0, nil, nil); 2365 if Assigned(OLEDBParameters) then ...
1. В строке 2363 запрашивается интерфейс OLEDBParameters.
2. Из строки 2365 видно, что этого интерфейса может и не быть (OLEDBParameters = nil).
3. Тем не менее, в строке 2364 без всякой проверки вызывается метод этого интерфейса.
4. Таким образом, в строке 2364 имеем шанс получить AV (что и наблюдается, если из запроса убрать параметры, но не отключать ParamCheck).
5. В Berlin этот баг исправлен. В других - не знаю, не копал.
|