我有以下代码来执行返回多个结果集的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;
事情是,它仍然适用于其他人,它是一个用户和数据的单一情况。我在存储过程中遇到了很大的问题,超时,但在这种情况下,也没有太多数据。所以,没有什么改变,从Management Studio执行时存储的proc工作正常,我不得不在某些时候重写代码,但没有其他任何帮助,但这仍然可以在99.99%的时间内运行。 – Tamm 2010-09-13 09:58:58
@Tamm。 “一个用户和数据的单个案例...”您可以将用户和数据分开以查看它是否与数据或用户(或计算机)相关联。这将有助于了解它是否与此数据库或某个用户的设置相关联。 – 2010-09-13 17:20:12
所以,它没有链接到用户。我在自己的电脑上运行它,结果如下:EOleException,操作已取消。 Delphi的ComObj单元中的DispCallError过程引发了该错误。所以它一定是数据相关的问题?我没有简单的方法将数据分成更小的部分进行调查,更不可能。 – Tamm 2010-09-13 18:08:46