接続の定義(FireDAC)

提供: RAD Studio
移動先: 案内検索

接続の操作(FireDAC) への移動


FireDAC 接続パラメータを保存および使用する方法と接続定義の意味を説明します。アプリケーションで接続パラメータを指定するには、接続定義を使用する必要があります。接続定義は一連のパラメータです。また、接続はプールすることもできます。

概要

接続定義とは、具体的な FireDAC ドライバを使用してアプリケーションを DBMS に接続する方法を定義した、一連のパラメータです。BDE エイリアスや、ADO UDL(OLEDB 接続文字列を格納したもの)、ODBC データ ソース名(DSN)に相当します。 サポート対象のデータベース管理システムおよび対応するパラメータの一覧は、「FireDAC データベース接続」を参照してください。

FireDAC では、3 種類の接続定義をサポートしています。

種類 説明 長所 短所
永続 一意の名前を持ち、FDManager によって管理され、接続定義ファイルに格納されます。 一度定義したら、多数のアプリケーションで再利用することができます。プールすることができます。 パラメータ(サーバー アドレス、DB 名など)が公開されるため、思いがけず変更されてしまう可能性があります。

新しく追加した定義を設計時に見えるようにするには、FDManager をアクティブ化し直すか Delphi IDE を再起動する必要があります。

非公開 一意の名前を持ち、FDManager によって管理されますが、接続定義ファイルには格納されません。 接続定義パラメータは、アプリケーション "外" からは見えません。プールすることができます。 アプリケーションではプログラムが再起動するたびに非公開接続定義を作成する必要があり、それを他のプログラムと共有することはできません。

設計時に作成することはできません。

一時 名前を持たず、接続定義ファイルに格納されず、FDManager によって管理されません。 接続定義を作成する最も簡単な方法は、TFDConnection.Params プロパティの必要な項目を指定することです。

TFDConnection コンポーネント エディタを使って設計時に作成することができます。

非公開と同様です。また、名前で参照することができず、プールすることもできません。

接続定義ファイル

永続接続定義は外部ファイルに格納されます。これを接続定義ファイルと呼びます。このファイルは、標準の INI 形式のテキスト ファイルです。最初は FDExplorerFDAdministrator ユーティリティを使ったり、手動やコードで編集することができます。デフォルトのこのファイルは C:\Users\Public\Documents\Embarcadero\Studio\FireDAC\FDConnectionDefs.ini です。

メモ: RAD Studio IDE の実行中に FDExplorer または FDAdministrator を使用して永続接続定義を新しく追加した場合、その接続定義は FireDAC の設計時コードから見えません。永続接続定義のリストを更新するには、FDManager をアクティブ化し直すか、RAD Studio IDE を再起動する必要があります。

このファイルの内容の例:

[Oracle_Demo]
DriverID=Ora
Database=ORA_920_APP
User_Name=ADDemo
Password=a
MetaDefSchema=ADDemo
;MonitorBy=Remote

[MSSQL_Demo]
DriverID=MSSQL
Server=127.0.0.1
Database=Northwind
User_Name=sa
Password=
MetaDefSchema=dbo
MetaDefCatalog=Northwind
MonitorBy=Remote

アプリケーションでは、接続定義ファイルの名前を FDManager.ConnectionDefFileName プロパティに指定することができます。FireDAC が接続定義ファイルを検索する場所は以下のとおりです。

  • ConnectionDefFileName が指定されている場合:
    • ファイル名にパスが付いていなければ、それがアプリケーションの EXE フォルダにあるかを検索します。
    • 付いている場合には、指定されたファイル名をそのまま使用します。
  • ConnectionDefFileName が指定されていない場合:
    • アプリケーションの EXE フォルダで、FDConnectionDefs.ini を探します。
    • 上記のファイルが見つからなければ、レジストリ キー HKCU\Software\Embarcadero\FireDAC\ConnectionDefFile に指定されたファイルを探します。デフォルトでは C:\Users\Public\Documents\Embarcadero\Studio\FireDAC\FDConnectionDefs.ini です。
メモ: FireDAC は、設計時には FDManager.ConnectionDefFileName の値を無視し、RAD Studio の Bin フォルダ内のファイルか、レジストリに指定されたファイルを探します。ファイルが見つからない場合には、例外が発生します。

FDManager.ConnectionDefFileAutoLoadTrue であれば、接続定義ファイルが自動的に読み込まれます。そうでなければ、接続定義が最初に使用される前に、FDManager.LoadConnectionDefFile メソッドを呼び出して、明示的に読み込まなければなりません。たとえば、TFDConnection.Connected を True に設定する前にです。

永続接続定義の作成

永続接続定義は、FDExplorer または FDAdministrator を使用して作成することができます。ここでは、コード内で作成する方法を説明します。また、接続定義デモも参照してください。

以下のコードでは、"MSSQL_Connection" という名前の接続定義を作成し、ローカルで動作している Microsoft SQL Server に OS 認証(SSPI)を使って接続するために必要なすべてのパラメータを指定しています。

uses
 FireDAC.Comp.Client, FireDAC.Stan.Def, FireDAC.Stan.Intf,
 // Required uses for creating a persistent connection with MSSQL (to fdconnectiondefs.ini)
 FireDAC.Phys.MSSQL,
 FireDAC.Phys.MSSQLDef;

const
 cNameConnDef = 'MSSQL_Connection';

procedure TForm1.PersistentConnectionClick(Sender: TObject);
 var
  oDef: IFDStanConnectionDef;
  oParams: TFDPhysMSSQLConnectionDefParams; // MSSQL connection params
 begin
  // Adding new persistent connection to fdconnectiondefs.ini
  FDManager.ConnectionDefs.AddConnectionDef;
  oDef := FDManager.ConnectionDefs.AddConnectionDef;
  oDef.Name := cNameConnDef;
  oParams := TFDPhysMSSQLConnectionDefParams(oDef.Params);
  oParams.DriverID := 'MSSQL'
  oParams.Database := 'Northwind';
  oParams.UserName := '.............';
  oParams.Password := '.............';
  oParams.Server := '127.0.0.1';
  oParams.OSAuthent := false;
  oParams.MARS := false;
  oDef.MarkPersistent;
  oDef.Apply;
end;

.....................

procedure TForm1.ConnectionClick(Sender: TObject);
  FDConnection1.ConnectionDefName := cNameConnDef;
  FDConnection1.Connected := True;
end;

FDManager は、FireDAC 接続マネージャのグローバル インスタンスです。そのプロパティである FDManager.ConnectionDefs: IFDStanConnectionDefs は、永続接続定義と非公開接続定義を含むコレクションです。AddConnectionDef メソッドで、新しい接続定義を追加します。MarkPersistent メソッドで、接続定義が永続であると指定します。Apply メソッドで、接続定義を接続定義ファイルに保存します。MarkPersistent を呼び出さなければ、接続定義は非公開になります。

非公開接続定義の作成

非公開接続定義はコードでしか作成できません。このコードは上記のものと似ていますが、MarkPersistent の呼び出しがありません。

また、BDE と同様の手法を使用することができます。

var
  oParams: TStrings;
begin
  oParams := TStringList.Create;
  oParams.Add('Server=127.0.0.1');
  oParams.Add('Database=Northwind');
  oParams.Add('OSAuthent=Yes');
  FDManager.AddConnectionDef('MSSQL_Connection', 'MSSQL', oParams);
  .....................
  FDConnection1.ConnectionDefName := 'MSSQL_Connection';
  FDConnection1.Connected := True;

一時接続定義の作成

設計時

一時接続定義は、設計時に[FireDAC 接続エディタ]を使って作成することができます。それには、TFDConnection をダブルクリックして次のエディタを開きます。


Defining.png

あるいは、デザイン モードで TFDConnection アイコンをクリックし、[オブジェクト インスペクタ]DriverName プロパティからドライバを選択します。その後で、Params プロパティを展開し、必要なプロパティをセットアップします。最後に、Connected プロパティを True に設定します。

実行時

実行時にコードで一時接続を作成するには、TFDConnection.Params プロパティに値を入力します。これは、接続定義を作成する最も簡単かつ便利な方法です。

FDConnection1.DriverName := 'MSSQL';
FDConnection1.Params.Add('Server=127.0.0.1');
FDConnection1.Params.Add('Database=Northwind');
FDConnection1.Params.Add('User_name=sa');
FDConnection1.Connected := True;

実行時に一時接続定義を作成するもう 1 つの方法は、TFDConnection.Params プロパティを DBMS 固有のクラスにキャストすることです。これは接続定義を作成する最も安全な方法です。IDE の支援機能とコンパイラの構文チェックを使用して、正しさを確認できるからです。

uses
  FireDAC.Phys.IBDef, FireDAC.Phys.IBWrapper;
......
FDConnection1.DriverName := 'IB';
with FDConnection1.Params as TFDPhysIBConnectionDefParams do begin
  Protocol := ipTCPIP;
  Server := '127.0.0.1';
  Database := 'c:\IB\employee.gdb';
  UserName := 'sysdba';
  Password := 'masterkey';
end;
FDConnection1.Connected := True;

もう 1 つ、実行時に TFDConnection.ConnectionString プロパティによって接続文字列を指定する方法もあります。アプリケーションの種類によっては、接続文字列を使って接続定義パラメータを指定すると便利です。以下に例を示します。

FDConnection1.ConnectionString := 'DriverID=MSSQL;Server=127.0.0.1;Database=Northwind;User_name=sa';
FDConnection1.Connected := True;

接続定義の編集

アプリケーションで、実行時に標準の[FireDAC 接続エディタ]ダイアログを使用して接続定義を作成し編集しなければならないことがあります。TFDConnection に格納された一時接続定義を編集するには、次のコードを使用します。

uses
  FireDAC.VCLUI.ConnEdit;
...
if TfrmFDGUIxFormsConnEdit.Execute(FDConnection1, '') then
  FDConnection1.Connected := True;

FireDAC 接続文字列として表現された接続定義を編集するには、次のコードを使用します。

uses
  FireDAC.VCLUI.ConnEdit;
...
var
  sConnStr: String;
...
sConnStr := FDConnection1.ResultConnectionDef.BuildString();
if TfrmFDGUIxFormsConnEdit.Execute(sConnStr, '') then begin
  FDConnection1.ResultConnectionDef.ParseString(sConnStr);
  FDConnection1.Connected := True;
end;

関連項目

サンプル