【问题标题】:Delphi query component ignores raising errorDelphi 查询组件忽略引发错误
【发布时间】:2013-01-15 22:50:08
【问题描述】:

我有一个TADOQuery 组件,它使用TADOConnection 连接到SQL Server 数据库。 现在,当我在组件中添加下面的 SQL 并调用 ExecSql 时,它会引发适当的异常,因为“创建”单词中有错字。

 exec ('creat1e table myTable 
     (
          col1     TPT_Dt       not null ,
          col2     TPT_FLOAT       not null
     )');

但是同样的语句,如果我将它添加到另一个语句中,那么 TADOQuery 组件会忽略这个异常。例如。 :

 select * from SomeOtherTable where id = 10

 exec ('creat1e table myTable 
     (
          col1     DtDataType       not null ,
          col2     FLOATDataType       not null
     )');

能否请您告诉我为什么 Delphi 在第二种情况下会忽略异常。

我的问题不在于 select 语句。即使我添加了一个 if 条件,那么也是同样的问题;

例如

if not exists (select * from dbo.sysobjects where id = object_id('TABLE1278') and type='U')
begin
 exec ('crea11te table table1278 
     (
          col1     TPT_Dt     
     )');
end

delphi 简单地忽略了错字。

提前致谢。

罗勒

【问题讨论】:

  • 我猜是因为第一个语句是成功的,并且 ADO 返回了一个数据集以及相关的错误消息
  • 您是否首先执行if not exists... 没有选择?如果是,那么我无法复制。如果您之前选择过,那么我认为问题出在 SQL exec 上。如果我省略 exec 并使用 crea11te 语句,则会引发错误。我已经用ADOCinnection.ExecuteeoExecuteNoRecords(默认)对其进行了测试,这甚至不应该尝试重新运行像 TADOQuery 这样的记录集。无论如何,有趣的问题。
  • This question 可能是相关的。 Microsoft (SET NOCOUNT ON) 提供的resolution 对我没有帮助。

标签: delphi


【解决方案1】:

返回查询生成的所有记录集。默认情况下会显示第一个,并带有相应的错误。
您可以通过 ADODataSet1.NextRecordset(a) 访问所有记录集。

例如您有以下查询

select * from TableWhichExists

Select * from TableWichNotExists

您将获取 TableWhichExists 的结果。

procedure TForm1.Button1Click(Sender: TObject);
var
 rs:_RecordSet;
 a:Integer;
begin
  rs := ADODataSet1.NextRecordset(a)
end;

您可以访问下一个记录集并会收到相应的错误。

NextRecordset 可能很有用,例如通过程序接收多个记录集,计算一次所有需要的记录集。

使用例如三个收到的结果你可以这样工作:

procedure TForm1.Button1Click(Sender: TObject);
var
 a:Integer;
begin
  Adodataset2.Recordset := ADODataSet1.NextRecordset(a) ;
  Adodataset3.Recordset := ADODataSet1.NextRecordset(a)
end;

Adodataset1 将显示第一个结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-14
    • 1970-01-01
    • 2023-03-12
    相关资源
    最近更新 更多