我有一个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
Delphi会直接忽略拼写错误。
提前感谢。
Basil
if not exists...
而没有 先执行 select first?如果是这样,那么我无法重现。如果你在之前执行了 select,那么我认为问题出在 SQL 的exec
上。如果我省略 exec 并使用crea11te
语句,则会引发错误。我已经使用ADOCinnection.Execute
进行了测试,并使用了eoExecuteNoRecords
(默认值),这不应该尝试重新运行像 TADOQuery 这样的记录集。无论如何,这是一个有趣的问题。 - kobik