Ошибка ADO «Операция отменена» в Delphi - PullRequest
3 голосов
/ 10 сентября 2010

У меня есть следующий код для выполнения хранимой процедуры sql, которая возвращает несколько наборов результатов, а затем читает этот результат из потока. Для справочной информации: он возвращает блоки xml в виде строк, а затем преобразует их в полный xml. Это работало хорошо в течение года, но теперь у меня есть случай, который приводит к сообщению об ошибке: Операция отменена. Отладчик показывает: Project x поднял класс исключения EOleException с сообщением Операция отменена. Я понятия не имею, что вызвало это. Любая помощь или предложения будут великолепны.

const
  adExecuteStream = $00000400; //Indicates that the results of a command execution should be returned as a stream. 
var
  objCmd, InputStream, XML, XSLT, Template, Processor, objConn, strmResults : Variant;
  ATStreamClass : TMemoryStream;
  Adapt : TStreamAdapter;
  OutputStream: IStream;

objCmd := CreateOLEObject('ADODB.Command');
objCmd.ActiveConnection := dmABaasMock.dbRaAndm.ConnectionObject;
objCmd.CommandType := adCmdText;
objCmd.CommandText := <sp proc name with params>;
strmResults := CreateOLEObject('ADODB.Stream');
strmResults.Open;
objCmd.Properties['Output Stream'] := strmResults;
objCmd.Execute(EmptyParam, EmptyParam, adExecuteStream); // HERE COMES THE EXCEPTION
strmResults.Position := 0;
xmlMemo.text := strmResults.ReadText;

Ответы [ 2 ]

2 голосов
/ 11 сентября 2010

Трудно угадать, что происходит, не видя больше.
Три вещи, которые вы можете сделать, чтобы получить больше информации отладки:

  • Что изменилось между тем, когда он работал и сейчас? Версия ОС (или ADO), БД, сохраненный процесс, ...
  • Работает ли сохраненный процесс при запуске непосредственно в среде SQL?
  • Не могли бы вы переписать свой код для использования обычных компонентов ADO вместо позднего связывания и получить результаты в DataSets вместо ADODB.Stream OleObject. Только наличие объектов Variant мало поможет, если вам нужно отлаживать и детализировать код? Вы не можете отладить черный ящик ...
1 голос
/ 13 сентября 2010

Недавно у меня появилось какое-то странное сообщение об ошибке при подключении к ADO и неправильная строка подключения.
Я не уверен на 100%, что это было то же самое сообщение об ошибке (извините, тогда я забыл сделать снимок экрана), но если это так, то это может помочь:

В .NET, когда вы подключаетесь к ADO и используете встроенную защиту, вы можете указать Integrated Security="True", но, используя собственных провайдеров (не только в Delphi, но и из любой собственной среды), вам придется указать Integrated Security="SSPI" .

Я попал в ситуацию, потому что я возился со строками подключения (для подключения из родного win32 Delphi к серверу, к которому я ранее подключался из .NET) и забыл скопировать только соответствующие части.

- Йерун

...