首页 > 解决方案 > Delphi IBX TIBSQL.ExecQuery 是否有奇怪的事务要求(FStreamedActive 因素)?

问题描述

我正在使用带有 IBX 的 Delphi(2009,没关系),我正在尝试执行简单的代码:

TestSQL.ExecQuery;

在此代码之前,我已经检查过(也可以在调试器手表中看到),TestSQL.Transaction.InTransactionTrue. 尽管如此,还是引发了异常:

EIBInterBaseError with message 'invalid transaction handle (expecting explicit transaction start)'

因此,除了执行代码之外,没有其他解决方案:

TestSQL.Transaction.StartTransaction;
TestSQL.ExecQuery;

现在引发了另一个异常:

EIBClientError with message 'Transaction is active'

彻底死胡同?德尔福有代码:

procedure TIBTransaction.CheckInTransaction;
begin
  if FStreamedActive and (not InTransaction) then
    Loaded;
  if (FHandle = nil) then
    IBError(ibxeNotInTransaction, [nil]);
end;

这意味着交易需求不仅由私有变量决定,InTransaction而且由私有变量决定FStreamedActive。那么 - 事务控制更复杂吗?我如何影响FStreamedActive?解决办法是什么?我的测试代码是更长代码的一部分,但我想知道如何分解事务状态的内部状态?

标签: delphifirebird

解决方案


我找到了解决方案 -TestSQL.Database无意中与TestSQL.Transaction.DefaultDatabase. 这体现在如此奇怪的错误消息中。IBX 允许所有这些数据库不同,这很奇怪。


推荐阅读