【发布时间】: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...没有选择?如果是,那么我无法复制。如果您之前选择过,那么我认为问题出在 SQLexec上。如果我省略 exec 并使用crea11te语句,则会引发错误。我已经用ADOCinnection.Execute和eoExecuteNoRecords(默认)对其进行了测试,这甚至不应该尝试重新运行像 TADOQuery 这样的记录集。无论如何,有趣的问题。 -
This question 可能是相关的。 Microsoft (
SET NOCOUNT ON) 提供的resolution 对我没有帮助。
标签: delphi