4

我有一个TADOQuery使用TADOConnection. 现在,当我将下面的 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 只是忽略了错字。

提前致谢。

罗勒

4

1 回答 1

2

返回从查询生成的所有记录集。默认情况下会显示第一个,并带有相应的错误。
您可以通过 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 将显示第一个结果。

于 2013-01-15T14:25:04.857 回答