6

私のアプリケーションは、Firebirdデータベースにアクセスするときにこの種のエラーを生成することがあります。

後続のステートメントの正常な実行を妨げるシステムエラーが原因で実行が失敗したGDSコード:335544726-SQLコード:-902-エラーコード:406 '

何が問題なのですか?これをデバッグする方法はありますか?

私はWindows7でFirebird2.5.1を実行しています。少なくともPythonを使用したkinterbasdbと、Delphiを使用したUIBコンポーネントがあります。

4

2 に答える 2

2

これの理由は、複数のスレッドからの同じ接続/トランザクションを使用していたようです。

于 2012-10-18T23:16:17.160 に答える
1

(IBXから)UIBに切り替えた後、このようなエラーも多数発生しました。
TUIBTransactionのトランザクションの種類(オプション)が原因です。「ReadCommited」:と 「Snapshot」の両方:
「tpNowait」 が原因で同じ原因になります。特に通常のHDDからSSDに切り替えた後。(各行の間に挿入すると、行は少し役に立ちましたが、完全には解決しませんでした。) [tpNowait,tpReadCommitted,tpRecVersion]
[tpConcurrency,tpNowait]
sleep(2);TR.Start; sleep(2); ... TR.Commit;

リスクが高すぎてAPPが永久にハングする可能性があるため、単に「tpWait」を使用したくありませんでした。

したがって、解決策は次のとおり
です。1.)トランザクションオプションを「デフォルト」に変更します。[tpConcurrency,tpWait,tpWrite]
2.)トランザクションを開始する前に、毎回実行時に設定します。 (タイムアウトが原因で失敗した場合は、より高い値で実行を繰り返すことができますが、フリーズしたUIについてユーザーに通知することをお勧めします。)TR.LockTimeOut := 5; //seconds

重要:
現在(2016年)のUIBコードはまったく処理できませんLockTimeOut。まず、修正する必要があります。ここのコードを参照してください...

于 2019-08-19T18:33:48.667 に答える