我的应用程序在访问firebird数据库时会生成这种错误:
由系统错误引起的失败执行 成功执行后续语句GDS代码:335544726- SQL代码:-902-错误代码:406'
有什么问题?有什么方法可以调试?
我在Windows 7上运行Firebird 2.5.1。
看起来这样的原因是从多个线程使用相同的连接/事务。
我们切换到UIB(来自IBX)后,我们也有许多错误。
它是由TuibTransaction的交易(选项)引起的。两者:
"读取任务":[tpNowait,tpReadCommitted,tpRecVersion]
和
"快照":[tpConcurrency,tpNowait]
由于" tpnowait"而造成了同样的原因。尤其是从正常的HDD转换为SSD之后。(在每行之间插入sleep(2);
,行TR.Start; sleep(2); ... TR.Commit;
有所帮助,但没有完全解决。)
我们不想简单地使用" TPWAIT",因为它的风险太大了,该应用程序可能永远悬挂。
所以解决方案是:
1.)将事务选项更改为"默认值"。[tpConcurrency,tpWait,tpWrite]
2.)我们在运行时 TR.LockTimeOut := 5; //seconds
每次启动一次交易。(如果由于超时而失败,您可以以更高的价值重复执行,而明智的明智之举也可以通知用户有关冷冻的UI。)
重要:
当前(2016)UIB代码根本无法处理LockTimeOut
。首先必须修复它。请参阅此处的代码...