Delphi中的ADO错误“取消操作”

时间:2010-09-10 15:07:59

标签: delphi ado delphi-7

我有以下代码用于执行返回多个结果集的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 个答案:

答案 0 :(得分:2)

如果没有看到更多内容,很难猜到出了什么问题 您可以采取三项措施来获取更多调试信息:

  • 工作和现在之间发生了什么变化?操作系统版本(或ADO),DB,存储过程,...
  • 直接在SQL环境中启动存储过程是否有效?
  • 您是否可以重写代码以使用常规ADO组件而不是进行后期绑定,并在DataSet中获取结果而不是ADODB.Stream OleObject。如果需要在代码中调试和向下钻取,只有Variant对象没有多大帮助?你无法调试黑匣子......

答案 1 :(得分:1)

我最近在连接到ADO时遇到了一些奇怪的错误消息,并且没有正确的连接字符串 我不是100%确定它是相同的错误消息(对不起,我忘了截取当时的截图),但如果是,那么这可能会有所帮助:

在.NET中,当您连接到ADO并使用集成安全性时,您可以指定Integrated Security="True",但使用本机提供程序(不仅在Delphi中,而且在任何本机环境中),您必须指定{ {1}}。

我遇到了这种情况,因为我正在摆弄连接字符串(从Delphi本机win32连接到我之前从.NET连接到的服务器),忘了复制相关部分。

- 的Jeroen