2010-09-10 18 views
3

我有以下代码来执行返回多个结果集的SQL存储过程,然后从流中读取此结果。对于背景信息:它将xml块作为字符串返回,然后将其转换为完整的xml。 它运行良好一年,但现在我有一个情况,导致错误消息:操作取消。调试器显示:项目x引发异常类EOleException,消息操作已取消。 我不知道是什么原因导致它。任何帮助或建议都会很棒。在德尔福ADO错误'操作取消'

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

很难猜出发生了什么事情而没有看到更多。
三件事情可以做,以获得更多的调试信息:

  • 发生了什么之间改变,当它的工作呢?操作系统版本(或ADO),数据库,存储过程,...
  • 直接在SQL环境中启动时存储过程是否正常工作?
  • 您可以重写代码以使用常规的ADO组件而不是进行晚期绑定,并在DataSets中获取结果而不是ADODB.Stream OleObject。如果需要在代码中进行调试和向下钻取,只有Variant对象没有多大帮助?你不能调试黑盒...
+0

事情是,它仍然适用于其他人,它是一个用户和数据的单一情况。我在存储过程中遇到了很大的问题,超时,但在这种情况下,也没有太多数据。所以,没有什么改变,从Management Studio执行时存储的proc工作正常,我不得不在某些时候重写代码,但没有其他任何帮助,但这仍然可以在99.99%的时间内运行。 – Tamm 2010-09-13 09:58:58

+0

@Tamm。 “一个用户和数据的单个案例...”您可以将用户和数据分开以查看它是否与数据或用户(或计算机)相关联。这将有助于了解它是否与此数据库或某个用户​​的设置相关联。 – 2010-09-13 17:20:12

+0

所以,它没有链接到用户。我在自己的电脑上运行它,结果如下:EOleException,操作已取消。 Delphi的ComObj单元中的DispCallError过程引发了该错误。所以它一定是数据相关的问题?我没有简单的方法将数据分成更小的部分进行调查,更不可能。 – Tamm 2010-09-13 18:08:46

1

我最近有一些奇怪的错误信息连接到ADO时,并没有连接字符串的权利。
我不是100%确定它是相同的错误信息(对不起,我忘了截图然后),但如果是这样,那么这可能有所帮助:

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

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

- jeroen

+0

感谢您的回答,连接字符串可能会令人头疼,但这里不能这样。 Theres没有连接问题,存储过程正确执行,连接仍然工作。 – Tamm 2010-09-13 10:06:38

+0

好的;什么是确切的异常(异常类,异常消息,异常属性,如果它是有错误列表的东西)?我猜你使用SQL Server;您是否在那里运行跟踪,以查看错误是在服务器上还是在ADO端? – 2010-09-13 11:25:55

+0

我跑了一个跟踪,错误不在服务器端。 EOleException,操作已取消。 Delphi的ComObj单元中的DispCallError过程引发了该错误。堆栈窗口中的最后一行是DispCallError(-2147352567,(0,0,'Microsoft SQL Native Client','Operation Canceled','',0,nil,nil,-2147217887),nil,False)。 – Tamm 2010-09-13 18:20:23