Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi ADO错误';操作已取消';在德尔菲_Delphi_Ado_Delphi 7 - Fatal编程技术网

Delphi ADO错误';操作已取消';在德尔菲

Delphi ADO错误';操作已取消';在德尔菲,delphi,ado,delphi-7,Delphi,Ado,Delphi 7,我有以下代码用于执行sql存储过程,该过程返回多个ResultSet,然后从流中读取该结果。背景信息:它以字符串形式返回xml块,然后将其转换为完整的xml。 它已经运行了一年多,但现在我有一个案例导致错误消息:操作取消。调试器显示:Project x引发异常类EOleException,消息操作已取消。 我不知道是什么引起的。任何帮助或建议都会很好 const adExecuteStream = $00000400; //Indicates that the results of a co

我有以下代码用于执行sql存储过程,该过程返回多个ResultSet,然后从流中读取该结果。背景信息:它以字符串形式返回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;
const
adExecuteStream=$00000400//指示命令执行的结果应作为流返回。
变量
objCmd、InputStream、XML、XSLT、模板、处理器、objConn、strmResults:Variant;
ATStreamClass:TMemoryStream;
改编:TStreamAdapter;
输出流:IStream;
objCmd:=CreateOLEObject('ADODB.Command');
objCmd.ActiveConnection:=dmABaasMock.dbRaAndm.ConnectionObject;
objCmd.CommandType:=adCmdText;
objCmd.CommandText:=;
strmResults:=CreateOLEObject('ADODB.Stream');
strmResults.Open;
objCmd.Properties['Output Stream']:=strmResults;
objCmd.Execute(EmptyParam、EmptyParam、adExecuteStream);//例外情况来了
strmResults.位置:=0;
xmlMemo.text:=strmResults.ReadText;

如果看不到更多,就很难猜出哪里出了问题。
要获取更多调试信息,可以执行以下三项操作:

  • 从它开始工作到现在发生了什么变化?操作系统版本(或ADO)、数据库、存储过程
  • 当直接在SQL环境中启动时,存储过程是否工作
  • 您是否可以重写代码以使用常规ADO组件而不是进行后期绑定,并在数据集中而不是ADODB.Stream对象中获取结果。如果您需要调试和深入了解代码,那么只有变量对象没有多大帮助?您无法调试黑盒

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

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

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


--jeroen

问题是,它仍然适用于其他所有人,只适用于一个用户和数据。我在存储过程中遇到过一些问题,比如非常大的结果、超时,但在这种情况下,也没有太多的数据。所以,什么都没有改变,存储过程在ManagementStudio中执行时可以正常工作,我确实需要在某个时候重写代码,虽然没有其他帮助,但它在99,99%的时间内仍然有效。@Tamm。“一个用户和数据只有一个案例……”您可以将用户和数据分开,看看它是否链接到数据或用户(或计算机)。这将有助于了解它是否链接到此数据库或某个用户的设置。因此,它没有链接到用户。我在自己的电脑上运行了它,结果相同:EOleException,操作取消。该错误是在Delphi的ComObj单元中的DispCallError过程中引发的。所以这一定是数据相关的问题?我没有简单的方法将数据分成更小的部分进行调查,更像是近乎不可能的事情。@Tamm。对于这组数据,ManagementStudio中存储的进程是否仍能正常工作?是的,这就是我认为ADO存在问题的原因。Delphi堆栈窗口中的最后一行是dispCallerError(-2147352567,(0,0,'Microsoft SQL本机客户端','Operation Cancelled','',0,nil,nil,-2147217887),nil,False)。感谢您的回答,连接字符串可能是一个令人头痛的问题,但这里不能出现这种情况。连接没有问题,存储的过程执行正确,之后连接仍然工作。OK;确切的异常是什么(异常类、异常消息、异常属性,如果它有错误列表)?我猜您使用的是SQL Server;您是否在那里运行了跟踪以查看错误是在服务器端还是在ADO端?我运行了跟踪,错误不在服务器端。EOleException,操作已取消。该错误是在Delphi的ComObj单元中的DispCallError过程中引发的。堆栈窗口中的最后一行是DispCallError(-2147352567,(0,0,'Microsoft SQL本机客户端','Operation Cancelled','',0,nil,nil,-2147217887),nil,False)。