是否可以在Delphi 6 BDE TUpdateSQL.ModifySQL中编写execute procedure (...with arguments...)
(对于Firebird 2.1数据库)?我试过,但即使对于最简单的SQL过程,我也收到错误消息Update failed
。那么 - 对于可以在ModifySQL中执行的语句有一些限制吗?我知道(我正在广泛使用),可以在Delphi IBX TIBDataSet.ModifySQL(或IBX组件的其他类似属性)中编写execute procedure
(以及更复杂的语句)。我应该避免在TUpdateSQL中执行程序还是我应该考虑的技巧?
答案 0 :(得分:1)
RenéHoffmann的想法是正确的 - 可以从update语句执行过程。例如。 ModifySQL中接受以下语句:
update target_table set
id = :id,
field1 = :field1,
field2 = (select proc.field2 from additional_actions_procedure(:field2, :param1, :param2) proc)
where
id = :old_id
Delphi Unit DBTables
包含解释引发异常的原因的代码:
procedure TUpdateSQL.ExecSQL(UpdateKind: TUpdateKind);
begin
with Query[UpdateKind] do
begin
Prepare;
ExecSQL;
if RowsAffected <> 1 then DatabaseError(SUpdateFailed);
end;
end;
因此受影响的行计数发生。但显然,受影响行的DBTables
计算与IBExpert中受影响的行计数不同。 IBExpert会计算受execute procedure
,update
语句或其他语句影响的实际受影响的行。但是DBTables
只计算(我的猜测)目标表中由update
语句更新的行。对Delphi代码的更多调查可以揭示更准确的解释。
此评论http://www.delphisources.ru/pages/faq/base/tupdatesql_many_queries.html建议修改DBTables
文件。