是否可以在Delphi 6 BDE TUpdateSQL中执行SQL过程?

时间:2017-08-14 20:09:41

标签: sql delphi firebird bde

是否可以在Delphi 6 BDE TUpdateSQL.ModifySQL中编写execute procedure (...with arguments...)(对于Firebird 2.1数据库)?我试过,但即使对于最简单的SQL过程,我也收到错误消息Update failed。那么 - 对于可以在ModifySQL中执行的语句有一些限制吗?我知道(我正在广泛使用),可以在Delphi IBX TIBDataSet.ModifySQL(或IBX组件的其他类似属性)中编写execute procedure(以及更复杂的语句)。我应该避免在TUpdateSQL中执行程序还是我应该考虑的技巧?

1 个答案:

答案 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 procedureupdate语句或其他语句影响的实际受影响的行。但是DBTables只计算(我的猜测)目标表中由update语句更新的行。对Delphi代码的更多调查可以揭示更准确的解释。

此评论http://www.delphisources.ru/pages/faq/base/tupdatesql_many_queries.html建议修改DBTables文件。