Delphi Firebird错误消息";系统错误导致执行不成功,从而妨碍后续语句的成功执行;
我的应用程序在访问Firebird数据库时有时会生成此类错误: 系统错误导致执行不成功,排除了 成功执行后续语句GDS代码:335544726- SQL代码:-902-错误代码:406' 有什么问题吗?有什么方法可以调试这个吗Delphi Firebird错误消息";系统错误导致执行不成功,从而妨碍后续语句的成功执行;,delphi,firebird,uib,Delphi,Firebird,Uib,我的应用程序在访问Firebird数据库时有时会生成此类错误: 系统错误导致执行不成功,排除了 成功执行后续语句GDS代码:335544726- SQL代码:-902-错误代码:406' 有什么问题吗?有什么方法可以调试这个吗 我正在Windows7上运行Firebird 2.5.1。至少有使用Delphi的Python和UIB组件的kinterbasdb。看起来原因是使用了来自多个线程的相同连接/事务。在我们切换到UIB(从IBX)之后,我们也遇到了许多类似的错误。 这是由TUIBTransa
我正在Windows7上运行Firebird 2.5.1。至少有使用Delphi的Python和UIB组件的kinterbasdb。看起来原因是使用了来自多个线程的相同连接/事务。在我们切换到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//每次启动事务前的秒数
。(如果由于超时而失败,您可以使用更高的值重复执行,同时明智的做法是通知用户冻结的UI。)
重要提示:当前(2016)UIB代码根本无法处理
LockTimeOut
。首先,它必须被修复。请参阅代码335544726->isc\u net\u read\u err->“从连接读取数据时出错”
,这表明存在某种网络错误。firebird日志文件包含哪些消息?您是否使用gfix实用程序检查了数据库文件的正常运行情况?上次备份/还原数据库是什么时候?为什么不将Firebird升级到最新的2.5.3快照?@Lightbull Local applications,任何东西都不能通过网络。@Harriv我不是说这是网络错误,我只是在错误消息中提供了错误代码的说明。您的应用程序是多线程的吗?如果是,线程是否共享相同的连接?