2017-12-11 108 views
2

TFDConnectionはFireDACを使用してFirebird(InterBase)のトランザクションLOCK TIMEOUTを設定する方法は?

TFDConnection.UpdateOptions.LockMode := lmPessimistic; 
TFDConnection.UpdateOptions.LockWait := true; 

を使用しているときTFDTransactionもそれのプロパティを持っていないようロック・タイムアウトのための設定を持っていないようです。

The Firebird SET TRANSACTION documentationは、LOCK TIMEOUTを設定できることを示しています。

タイムアウトプロパティを設定するための見落としがあるのですか、接続を開いた後にSET TRANSACTION LOCK TIMEOUTを実行する必要がありますか?
FireDAC.Phys.IB * .pasファイルを掘り起こした場合は、isc_tpb_lock_timeoutへの参照がありますが、使用方法はありませんか?

答えて

2

これは(Connect to Interbase (FireDAC)参照)IBAdvancedパラメータによって定義することができる。

';'追加パラメータの区切りリスト。 FireDAC.Phys.IBWrapperユニット(DPBInfos定配列を参照)で、サポートされているパラメータの完全なリストを見つけることができます。各コードの説明は、Interbaseのマニュアルに記載されています。

const 
    TRPBInfo_Items = 24; 
    TRPBInfos: array[1 .. TRPBInfo_Items] of TIBPBInfo = (
    (Name: 'consistency';  ParamType: prNoneNoZ; Code: isc_tpb_consistency), 
    (Name: 'concurrency';  ParamType: prNoneNoZ; Code: isc_tpb_concurrency), 
    (Name: 'shared';   ParamType: prNoneNoZ; Code: isc_tpb_shared), 
    (Name: 'protected';  ParamType: prNoneNoZ; Code: isc_tpb_protected), 
    (Name: 'exclusive';  ParamType: prNoneNoZ; Code: isc_tpb_exclusive), 
    (Name: 'wait';    ParamType: prNoneNoZ; Code: isc_tpb_wait), 
    (Name: 'nowait';   ParamType: prNoneNoZ; Code: isc_tpb_nowait), 
    (Name: 'read';    ParamType: prNoneNoZ; Code: isc_tpb_read), 
    (Name: 'write';   ParamType: prNoneNoZ; Code: isc_tpb_write), 
    (Name: 'lock_read';  ParamType: prStrg; Code: isc_tpb_lock_read), 
    (Name: 'lock_write';  ParamType: prStrg; Code: isc_tpb_lock_write), 
    (Name: 'verb_time';  ParamType: prNoneNoZ; Code: isc_tpb_verb_time), 
    (Name: 'commit_time';  ParamType: prNoneNoZ; Code: isc_tpb_commit_time), 
    (Name: 'ignore_limbo';  ParamType: prNoneNoZ; Code: isc_tpb_ignore_limbo), 
    (Name: 'read_committed'; ParamType: prNoneNoZ; Code: isc_tpb_read_committed), 
    (Name: 'autocommit';  ParamType: prNoneNoZ; Code: isc_tpb_autocommit), 
    (Name: 'rec_version';  ParamType: prNoneNoZ; Code: isc_tpb_rec_version), 
    (Name: 'no_rec_version'; ParamType: prNoneNoZ; Code: isc_tpb_no_rec_version), 
    (Name: 'restart_requests'; ParamType: prNoneNoZ; Code: isc_tpb_restart_requests), 
    (Name: 'no_auto_undo';  ParamType: prNoneNoZ; Code: isc_tpb_no_auto_undo), 
    // IB75 
    (Name: 'no_savepoint';  ParamType: prNoneNoZ; Code: isc_tpb_no_savepoint), 
    // FB20 
    (Name: 'lock_timeout';  ParamType: prCard; Code: isc_tpb_lock_timeout), 
    // IB2017 
    (Name: 'exclusivity';  ParamType: prNoneNoZ; Code: isc_tpb_exclusive), 
    (Name: 'wait_time';  ParamType: prCard; Code: isc_tpb_wait_time) 
    ); 

ので、ために例えば:

これは、彼らに*を定義FireDAC.Phys.IBWrapperでセクションです5秒のタイムアウト:

TFDConnection.Params.Add('IBAdvanced=lock_timeout=5'); 

*ドキュメントは、彼らがDPBInfosであると述べているが、彼らはTRPBInfosであることに注意してください。

関連する問題