接続の確立(FireDAC)
接続の操作(FireDAC) への移動
FireDAC を使用して DBMS への接続をオープンまたはクローズする方法を説明します。FireDAC には、データベースへの接続のオープンを支援する、TFDConnection コンポーネントがあります。
概要
接続定義が作成された後、データベースへの接続を確立できます。一般的に、これを行うには 2 つの方法があります:
- 明示的に、TFDCustomConnection.Connected を True に設定する、または、Open メソッドのいずれかを呼び出す。
- 暗黙的に、DBMS とやり取るする必要があるアクションを実行する。たとえば、リンク付けされた TFDQuery Active プロパティに True を設定します。ResourceOptions.AutoConnect は True でなければならず、そうでなければ、例外が発生する点に注意してください。
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 のとき):
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.ChangeExpiredPassword は True になり、ダイアログは新しいパスワードを要求します。
接続のクローズ
接続は、以下のいずれかの方法でクローズすることができます:
- 明示的に、TFDCustomConnection.Connected を False を設定して。
- 暗黙的に、接続オブジェクトにアクティブ コマンドやデータセットがなく、ResourceOptions.KeepConnection が False の場合に。
FireDAC は、接続をクローズする前に、アクティブ トランザクションを終了します(まだ残っていた場合)。TxOptions.DisconnectAction を使用すると、実行されたアクションを制御することができます。
また、TFDCustomConnection.BeforeDisconnect イベントはその前に発生します。接続がクローズされた後、AfterDisconnect イベントは発生します。