Delphi查询组件忽略引发错误

时间:2013-01-15 14:05:26

标签: delphi

我有一个TADOQuery组件,它使用TADOConnection连接到SQL Server数据库。 现在,当我将以下SQL添加到组件中,并调用ExecSql时,它会引发正常的异常,因为在' Create'中有一个拼写错误。字。

 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
德尔福只是忽略了错字。

提前致谢。

罗勒

1 个答案:

答案 0 :(得分:2)

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

e.g。您有以下查询

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会显示第一个结果。