ドライバの構成(FireDAC)

提供: Appmethod Topics
移動先: 案内検索

接続の操作(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 です。

設計時には、Appmethod の 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。
  • Ora
  • IB/FB
  • MySQL
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 コンポーネントを使用する他のモジュールを読み込む前に、リンク コンポーネントを使用するモジュールを読み込むことが困難だからです。その結果、リンク コンポーネントによってドライバが適切に構成されます。

関連項目