接続の確立(FireDAC)

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

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


FireDAC を使用して DBMS への接続をオープンまたはクローズする方法を説明します。FireDAC には、データベースへの接続のオープンを支援する、TFDConnection コンポーネントがあります。

概要

接続定義が作成された後、データベースへの接続を確立できます。一般的に、これを行うには 2 つの方法があります:

  • 明示的に、TFDCustomConnection.ConnectedTrue に設定する、または、Open メソッドのいずれかを呼び出す。
  • 暗黙的に、DBMS とやり取るする必要があるアクションを実行する。たとえば、リンク付けされた TFDQuery Active プロパティに True を設定します。ResourceOptions.AutoConnectTrue でなければならず、そうでなければ、例外が発生する点に注意してください。

FireDAC は、Connected プロパティの他に、複数の TFDCustomConnection.Open メソッドがあります。これらのメソッドにより、FireDAC 接続文字列を使用することができます。これは、param=value[;...param=value] 形式の文字列です。例:

FDConnection1.Open('DriverID=SQLite;Database=c:\test.sdb;Password=12345');

BeforeConnect イベントは、接続がオープンする前に発生します。接続が確立した後、AfterConnect イベントは発生します。

接続エラーの処理

接続の確立が失敗した場合、アプリケーションは次のいずれかの方法を用いて、失敗を分析することができます:

  • TFDCustomConnection.OnError イベント ハンドラを利用する。これは、接続が暗黙的にオープンされた場合に、より適しています。
  • try ... except ... end 構文を利用する。これは、明示的に確立された接続にベストな方法です。例:
uses
  FireDAC.Stan.Consts, FireDAC.Stan.Error;
...
try
  FDConnection1.Connected := True;
except
  on E: EFDException do
    if E.FDCode = er_FD_ClntDbLoginAborted then
      ; // user pressed Cancel button in Login dialog
  on E: EFDDBEngineException do
    case E.Kind of
    ekUserPwdInvalid: ; // user name or password are incorrect
    ekUserPwdExpired: ; // user password is expired
    ekServerGone: ;     // DBMS is not accessible due to some reason
    else                // other issues
    end;
end;

メモ: ログイン ダイアログは、ユーザーにログイン認証情報を再び入れるよう提示することで、エラー ekUserPwdInvalid のタイプを自動的に処理します。この処理を無効にするには、TFDGUIxLoginDialog.LoginRetries に -1 を設定します。エラーのタイプ ekUserPwdExpired はまた、パスワードを再度入力するよう提示することで、自動的に処理されます。

また、接続リカバリが設定されている場合、エラーのタイプ ekServerGone は、接続にまずオフライン状態を与えます。代わりに、TFDCustomConnection.Ping メソッドは、DBMS が利用可能な場合に、ekServerGone エラーを回避し、接続をアクティブにするために使用できます。

詳細については、「エラー処理」を参照してください。

ログイン ダイアログの利用

GUI アプリケーションは、TFDGUIxLoginDialog コンポーネントを使用して、エンド ユーザーがデータベース認証情報を入力できるようにします。ログイン ダイアログは、次のいずれかの方法でバインドされます:

  • TFDGUIxLoginDialog コンポーネントをフォームにドロップします。それ以上のセットアップは不要です。 このダイアログは、アプリケーションのデフォルトのログイン ダイアログになります。
  • TFDGUIxLoginDialog コンポーネントをフォームにドロップし、TFDCustomConnection.LoginDialog をこのダイアログに設定します。ダイアログは、この接続によってプライベートで使用されます。

ログイン ダイアログは、TFDCustomConnection によって自動的に起動されます(LoginPrompt = True のとき):

FireDACLoginFDDemo.png

TFDGUIxLoginDialog.VisibleItems プロパティを使用して、どの接続定義パラメータがエンド ユーザーを表示するのか、どのように命名するのかを指定することができます。最後のオプションで、ログイン ダイアログをローカライズすることができます。たとえば、ドイツ語を話す SQL Server 開発者は次を指定することができます:

with FDGUIxLoginDialog1.VisibleItems do begin
  Clear;
  Add('Server');
  Add('User_name=Benutzer');
  Add('Password=Kennwort');
  Add('OSAuthent');
end;
FDConnection1.LoginDialog := FDGUIxLoginDialog1;
FDConnection1.Connected := True;

DBMS がパスワード期限をサポートしている場合、パスワードは期限切れとなり、TFDGUIxLoginDialog.ChangeExpiredPasswordTrue になり、ダイアログは新しいパスワードを要求します。

接続のクローズ

接続は、以下のいずれかの方法でクローズすることができます:

FireDAC は、接続をクローズする前に、アクティブ トランザクションを終了します(まだ残っていた場合)。TxOptions.DisconnectAction を使用すると、実行されたアクションを制御することができます。

また、TFDCustomConnection.BeforeDisconnect イベントはその前に発生します。接続がクローズされた後、AfterDisconnect イベントは発生します。

関連項目