TFDManager と TFDConnection に関する質問
FAQ(FireDAC) への移動
このトピックでは、TFDManager と TFDConnection に関係する質問と回答の一覧を扱います。
Q1: TFDManager を含んだ基底データ モジュール クラスがあります。下位クラスを作成しようとすると、"アプリケーション内の FDManager は 1 つだけでなければなりません" というエラーが発生します。どこが間違っているのでしょうか。
A: アプリケーションでは FDManager は 1 つしか存在できません。お使いのクラスでそれを明示的に作成するのではなく、FDManager 関数を通じてシングルトン オブジェクトを参照します。
Q2: 現在のプロジェクト グループには、いくつかの異なる Delphi プロジェクト(アプリケーション)があり、それぞれに専用の DataModule と FDManager があります。これらのデータ モジュールのうち、いくつかをたまたま(コピーまたは比較のために)同時に開いたら、FDManager はアプリケーションごとに 1 つしか存在できないという内容のエラーが発生し、データ モジュールの 1 つから FDManager の 1 つが即座に削除されます。
A: 本当に TFDManager が必要ですか。アプリケーションで TFDManager を明示的に作成する必要はありません。必要なのは、オプションと構成ファイルを設計時に設定することです。
Q3: 絶えず FDManager を解放し、作成し直さなければなりません。この状況を改めることはできますか。
A: いいえ、TFDManager は設計時または実行時に 1 つしか作成できないので、この状況は改善できません。TFDManager が複数あると、そのうちのどれを使用すればよいか FireDAC にはわかりません。Q1 も参照してください。
Q4: FireDAC では接続のプールをサポートしていますか。
A: はい、サポートしています。一般に、接続のプールでは、開いている "物理" 接続のプールを保持しており、TFDConnection.Connected が True に設定されたとき、FireDAC では、そのプールから "物理" 接続を 1 つ取り出してそれを使用します。TDDConnection.Connected が False に設定されたとき、その "物理" 接続は閉じられるのではなく、プールに戻されます。
FireDAC で接続のプールを使用するには、お使いの接続定義に Pooled=True を追加するだけです。それ以外に特別な対処は必要ありません。詳細については、「マルチスレッド処理」を参照してください。
Q5: [FireDAC 接続エディタ]では、FDPhysFBDriverLink1.VendorLib が無視されているように見え、ハードコードされたドライバが使用されています。
A: VendorLib は、このドライバを使用する最初の接続より先に設定する必要があります。接続の確立後、DBMS クライアントが読み込まれます。
設計時には、TFDPhysXXXDriverLink プロパティが必ず使用されるようにするため、データ モジュール/フォームの作成順序の先頭に TFDPhysXXXDriverLink があることを確かめます。その後、必要に応じて Delphi IDE を再起動します。
実行時には、以下のように、ドライバ リンクの Release メソッドを使用します。
FDConnection1.Close;
...
FDConnectionN.Close;
FDPhysFBDriverLink.VendorLib := 'c:\fbclient.dll';
FDPhysFBDriverLink.Release;
FDConnection1.Open;
...
FDConnectionN.Open;
もう 1 つの選択肢は、仮想ドライバを定義することです。詳細については、「ドライバの構成」を参照してください。以下に例を示します。
[FB_Embedded]
BaseDriverID=FB
VendorLib = C:\fb\fbembed.dll
設計時に、FB_Embedded ドライバを DriverID として使用します。実行時には、FDDrivers.ini を使用することもできますし、ただ TFDPhysXXXDriverLink を構成するだけでもかまいません。