delphi - Delphi IBX TIBSQL.ExecQuery 是否有奇怪的事务要求(FStreamedActive 因素)?
问题描述
我正在使用带有 IBX 的 Delphi(2009,没关系),我正在尝试执行简单的代码:
TestSQL.ExecQuery;
在此代码之前,我已经检查过(也可以在调试器手表中看到),TestSQL.Transaction.InTransaction
即True
. 尽管如此,还是引发了异常:
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
?解决办法是什么?我的测试代码是更长代码的一部分,但我想知道如何分解事务状态的内部状态?
解决方案
我找到了解决方案 -TestSQL.Database
无意中与TestSQL.Transaction.DefaultDatabase
. 这体现在如此奇怪的错误消息中。IBX 允许所有这些数据库不同,这很奇怪。
推荐阅读
- c - C:快餐项目的订单系统
- r - 使用 tidyverse 创建一个自动化函数,该函数合并从 R 中的列表列表中获取的两个数据集,从而提供合并的数据集
- django - 导入视图时为什么会出现循环导入错误?
- bootstrap-4 - 创建对象后,我的画布/图形跳到左侧
- python - Scikit 学习如何将缺少数据的分类值更改为数字值
- amazon-web-services - Powershell ISE 是否支持 aws cli?
- angular - 通过提供的选项在服务中注册依赖项时无法解析组件的所有参数?
- c# - 如何转换对象列表json模型?
- android - Android导航组件 - 更改根片段?
- r - 我的 df 中的名称分为姓名、姓氏,有时还有中间名 (M.) 如何将它们全部放在我所有 df 的一列中?