ドライバの構成(FireDAC)
接続の操作(FireDAC) への移動
DBMS クライアント ライブラリの指定方法も含め、FireDAC DBMS ドライバの構成方法を説明します。FireDAC ドライバをアプリケーションにリンクするには、DBMS クライアントをドライバ パラメータやその他のオプション パラメータに指定します。アプリケーションでは、TFDPhysXxxDriverLink コンポーネントや外部構成ファイルを使用することができます。
概要
ドライバの動作の調整は、ドライバ構成ファイルまたは TFDPhysXxxDriverLink コンポーネントを使って行うことができます。ドライバ構成ファイルについての説明のほとんどは、TFDPhysXxxDriverLink コンポーネントにも当てはまります。
ドライバ構成ファイル
ドライバ構成ファイルは、標準の INI テキスト ファイルです。手動でしか編集できません。基本的に、ドライバ構成ファイルを使用すると以下のことができます。
- 基底ドライバのパラメータの調整(セクション名 = 基底ドライバ ID)。
- 新しい仮想ドライバの追加。これは、基底ドライバのパラメータ群を新しい名前で保存したものです(セクション名 = 新しい仮想ドライバ ID)。
FireDAC がドライバ構成ファイルを検索する場所は以下のとおりです。
- アプリケーション EXE フォルダの FDDrivers.ini。
- 上記のファイルが見つからなければ、レジストリ キー HKCU\Software\Embarcadero\FireDAC\DriverFile に指定されたファイルを探します。デフォルトでは
C:\Users\Public\Documents\Embarcadero\Studio\FireDAC\FDDrivers.ini
です。
設計時には、RAD Studio の Bin フォルダ内のファイルか、レジストリに指定されたファイルが使われます。
基底ドライバと仮想ドライバ
ドライバ構成ファイル内のセクション名が基底ドライバ ID の場合("ASA" や "Ora" など)、基底ドライバは該当するセクションに指定されたパラメータ値を使用します。
セクション名がどの基底ドライバの ID でもない場合("Ora815" や "MySQL510_Embedded" など)、FireDAC は新しい仮想ドライバを登録します。仮想ドライバでは、BaseDriverID パラメータで指定した基底ドライバの実装と、指定したパラメータの値が使われます。その後、仮想ドライバ ID を DriverID 接続定義パラメータの値として使用できるようになります。仮想ドライバを使用すると、アプリケーションで以下が可能になります。
- 同じアプリケーション実行内で確立された異なる接続で、異なるバージョンの DBMS クライアント ソフトウェアを操作すること(InterBase と Firebird に接続するなど)
- DBMS クライアント ソフトウェアのバージョンを明示的に選択すること(ワークステーションにインストールされた数多くの LIBMYSQL.DLL の 1 つを使用するなど)
- パラメータを指定する必要があるドライバをセットアップすること(MySQL Embedded サーバーなど)
ドライバ構成パラメータ
以下のパラメータを指定できます。
パラメータ | 説明 | 適用されるドライバ |
---|---|---|
VendorHome[ | Win32 | Win64 | MacOS32 | MacOS64 | UIX32 | UIX64] | Oracle ホームの名前。 | Ora |
基底インストール パス。例: C:\ib\ib2007 | IB | |
標準のサーバーの基底インストール パス。例: C:\MySQL\MySQL5-1-7。または、Embedded サーバーの場合には LIBMYSQLD.DLL のパス。C:\MyAPP\MySQL など。 | MySQL | |
VendorLib[ | Win32 | Win64 | MacOS32 | MacOS64 | UIX32 | UIX64] | DBMS クライアント ソフトウェアの API DLL 名。例: libmysql510.dll。 |
|
ODBCDriver | ODBC ドライバ名。例: Adaptive Server Anywhere 8.0。 | ODBC ベースのドライバすべて |
ODBCAdvanced | ODBC ドライバの追加のパラメータ。
ODBC ドライバ パラメータを ';' で区切って並べた文字列です。 指定可能な値については、ベンダのドキュメントを確認してください。 |
ODBC ベースのドライバすべて |
EmbeddedArgs | MySQL Embedded サーバーの引数。
MySQL サーバーの引数を ';' で区切って並べた文字列です。 指定可能な値については、ベンダのドキュメントを確認してください。例: --datadir=./data;--language=./;--skip-innodb. |
MySQL |
EmbeddedGroups | MySQL Embedded サーバー構成ファイルのグループ。 | MySQL |
NLSLang | Oracle の NLS_LANG 環境変数の値。 | Ora |
TNSAdmin | Oracle の TNS_ADMIN 環境変数の値。 | Ora |
ODBC ベース以外のドライバで VendorLib が指定されている場合には、FireDAC は指定された DLL を使用します。VendorHome が指定されている場合には、Bin サブフォルダ内のデフォルトの名前の DLL を使用します。どちらも指定されていなければ、以下のフォルダ内のデフォルトの名前の DLL を使用します。
- Ora ドライバの場合は、プライマリ Oracle ホーム
- それ以外のドライバの場合は、PATH 環境変数のフォルダのうち、その DLL を含んでいる最も左のフォルダ
さらに、プラットフォームを示すサフィックスを指定することもできます。
ODBC ベースのドライバで ODBCDriver が指定されている場合には、FireDAC は指定されたドライバを使用します。指定されていなければ、デフォルトのドライバ名を使用します。
ドライバ構成ファイルの内容の例
[ASA]
; ASA base driver will use specified ODBC driver
ODBCDriver=Adaptive Server Anywhere 8.0
[Ora815]
; Ora815 virtual driver will use specified Oracle Home
BaseDriverID=Ora
VendorHomeWin32=OraHome815
VendorHomeWin64=OraHome815_64
[MySQL327]
; MySQL327 virtual driver will use specified LIBMYSQL.DLL
BaseDriverID=MySQL
VendorLib=c:\LIBMYSQL327.DLL
[MySQL510_Embedded]
; MySQL510_Embedded virtual driver will use specified MySQL embedded library and arguments
BaseDriverID=MySQL
VendorLib=c:\LIBMYSQLD.DLL
EmbeddedArgs=--datadir=./data;--language=./;--skip-innodb;--skip-networking
[MSSQL_2000]
; MSSQL_2000 virtual driver will use specified ODBC driver
BaseDriverID=MSSQL
ODBCDriver=SQL SERVER
ODBCAdvanced=
[FB21]
; FB21 virtual driver will use specified Firebird client library
BaseDriverID=FB
VendorLibWin32=C:\ib\fb21\bin\fbclient.dll
VendorLibWin64=C:\ib\fb21_64\bin\fbclient.dll
[FB21_Embedded]
; FB21_Embedded virtual driver will use specified Firebird client library
BaseDriverID=FB
VendorLib=C:\ib\fb21_embed\bin\fbembed.dll
コードでのドライバの構成
FireDAC ドライバは、実行時にアプリケーション コードで構成することもできます。そのためには、該当する TFDPhysXXXDriverLink コンポーネントをフォームにドロップします。このコンポーネントには、ドライバ構成ファイルのパラメータと同じ名前のプロパティがあります。リンク コンポーネントのプロパティは、そのドライバを使って DBMS への最初の接続を開く前に設定しておく必要があります。以下のコード例では、実行時に Firebird ドライバを構成する方法を示しています。
interface
uses
..., FireDAC.Phys.FB;
type
TForm1 = class(TForm)
......
FDPhysFBDriverLink1: TFDPhysFBDriverLink;
FDConnection1: TFDConnection;
procedure FormCreate(Sender: TObject);
......
end;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
FDPhysFBDriverLink1.VendorLib := 'C:\ib\fb21_embed\bin\fbembed.dll';
FDConnection1.ConnectionDefName := 'FB_Demo';
FDConnection1.Connected := True;
end;
ドライバを使って接続を確立した状態で、別の DBMS クライアントに切り替える必要が生じた場合には、以下の処理を行います。
- そのドライバ上のすべての接続を閉じる。
- ドライバ リンクの Release メソッドを呼び出す。
- 必要なリンク プロパティを変更する。
そのドライバを使って次に接続するときには、新しいリンク プロパティが使われます。以下のコード例では、実行時に Firebird のドライバ構成を変更する方法を示しています。
FDConnection1.Close;
FDPhysFBDriverLink1.Release;
FDPhysFBDriverLink1.VendorLib := 'C:\fbclient.dll';
FDConnection1.Open;
メモ: 設計時にリンク コンポーネントを使ってドライバを構成することは可能ですが、推奨できません。FireDAC コンポーネントを使用する他のモジュールを読み込む前に、リンク コンポーネントを使用するモジュールを読み込むことが困難だからです。その結果、リンク コンポーネントによってドライバが適切に構成されます。