Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.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 在返回结果集后发生SQL错误时,如何强制TADOConnection引发异常_Delphi_Delphi Xe2_Ado - Fatal编程技术网

Delphi 在返回结果集后发生SQL错误时,如何强制TADOConnection引发异常

Delphi 在返回结果集后发生SQL错误时,如何强制TADOConnection引发异常,delphi,delphi-xe2,ado,Delphi,Delphi Xe2,Ado,当返回某个结果集后发生异常时,TADOConnection不希望引发异常。例如: ADOConnection1.Execute('SET NOCOUNT ON; SELECT 0; THROW 50000, ''Custom error'', 1;'); 上面的代码不会抛出,因为存在由SELECT 0导致的结果集 在这种情况下,如何强制TADOConnection抛出异常?我无法避免返回结果集。我尝试过的事情: 处理OnInfoMessage事件,但它从未被激发 正在检查TADOConnec

当返回某个结果集后发生异常时,TADOConnection不希望引发异常。例如:

ADOConnection1.Execute('SET NOCOUNT ON; SELECT 0; THROW 50000, ''Custom error'', 1;');
上面的代码不会抛出,因为存在由
SELECT 0导致的结果集

在这种情况下,如何强制TADOConnection抛出异常?我无法避免返回结果集。我尝试过的事情:

  • 处理
    OnInfoMessage
    事件,但它从未被激发
  • 正在检查TADOConnection.Errors属性,但其中没有错误
我发现了一篇针对这个问题的文章,但它与.NET有关:


我可以使用
TADOQuery
这样的工具来显示
自定义错误

var
  t : integer;
begin
  ADOQuery1.SQL.Text := 'SET NOCOUNT ON; SELECT 0; THROW 50000, ''Custom error'', 1;';
  ADOQuery1.Open;
  t := 0;
  ADOQuery1.NextRecordset(t); // exception thrown here
end;

谢谢,现在如果没有返回结果集,我就有问题了。ADOQuery1.Open在这种情况下不起作用。我想没有通用的方法来处理这两种情况。如果没有更多答案出现,将接受此答案。这可能不是最好的解决方案,但如果您知道每次编写查询时是否可以返回结果集,则可以选择是否使用ADOQuery。不幸的是,在一个关闭的ADOQUERY上执行
NextRecordSet
是不可能的。这可能是一个愚蠢的建议,但如何始终将
select 0
添加到查询中?我认为对于不返回结果集的语句,应该使用TADOCommand。我希望您能够控制执行哪种语句,这样您就可以决定使用哪种组件了。@GuidoG一点也不愚蠢,我已经尽可能地使用了它:)