データベースセッションの管理
メモ: ボーランド データベース エンジン(BDE)の使用は推奨されません。今後 BDE は機能拡張されません。たとえば、BDE では Unicode がサポートされていません。BDE を使用して新たに開発しないことをお勧めします。既存のデータベース アプリケーションを BDE から dbExpress に移行することを検討してください。
BDE 対応アプリケーションのデータベース接続、ドライバ、カーソル、問い合わせなどは、1 つまたは複数の BDE セッションのコンテキスト内で管理されます。セッションはデータベース接続などの一連のデータベースアクセス処理を分離しますが、アプリケーションの別のインスタンスを開始する必要はありません。
すべての BDE ベースのデータベースアプリケーションには、デフォルトの BDE セッションをカプセル化する、Bde.DBTables.Session というセッションコンポーネントが自動的に提供されます。アプリケーションにデータベースコンポーネントを追加すると、そのコンポーネントはデフォルトのセッションに自動的に関連付けられます(その SessionName は「Default」であることに注意してください)。デフォルトセッションでは、別のセッションに関連付けられていないすべてのデータベースコンポーネントを、それらが暗黙的か持続的かにかかわらず、グローバルに制御できます。暗黙的なデータベースコンポーネントは、開発者が作成するデータベースコンポーネントに関連付けられていないデータセットを開く実行時にデフォルトセッションによって作成されます。持続的なコンポーネントは、アプリケーションで明示的に作成されます。設計時にはデータモジュールまたはフォームにデフォルトセッションは表示されませんが、実行時にはコードでデフォルトセッションのプロパティやメソッドにアクセスできます。
アプリケーションが以下のことをする必要がなければ、デフォルトセッションを使用するためにコードを記述する必要はありません。
- 明示的にセッションをアクティブまたは非アクティブにし、このセッションでデータベースを開く機能を有効または無効にする。
- デフォルトセッションのプロパティを変更する。暗黙的に生成されるデータベースコンポーネントのデフォルトのプロパティを指定する場合など
- デフォルトセッションのメソッドを実行する。データベース接続の管理(例: ユーザーの操作に応じてデータベース接続を開くまたは閉じる)を実行する場合など
- デフォルトセッションのイベントに応答する。パスワード保護された Paradox テーブルや dBASE テーブルにアプリケーションがアクセスを試みる場合など
- Paradox のディレクトリ位置を設定する。NetFileDir プロパティを設定して、ネットワーク上の Paradox テーブルにアクセスする場合や、PrivateDir プロパティをローカルドライブに設定してパフォーマンスを向上させる場合など
- デフォルトセッションを使用するデータベースとデータセットの、データベース接続の環境状態を示す可能性のある BDE エリアスを管理する
データベースコンポーネントを設計時にアプリケーションに追加するか実行時に動的に作成する場合、明確にほかのセッションに関連付けないと、それらのデータベースコンポーネントは自動的にデフォルトセッションに関連付けられます。データベースコンポーネントに関連付けられていないデータセットを開こうとすると、自動的に次の処理が行われます。
- 実行時にそのデータセット用のデータベースコンポーネントが作成される
- デフォルトセッションに関連付けられる
- デフォルトセッションのプロパティに基づいてデータベースコンポーネントのいくつかの主なプロパティが初期化される。これらのプロパティの中で最も重要なのが KeepConnections です。KeepConnections は、アプリケーションがどのようなときにデータベース接続を維持または切断するかを指定します。
デフォルトのセッションは、そのままでほとんどのアプリケーションで変更することなく使用することができます。作成するデータベースコンポーネントを明示的に指定したセッションに関連付けなければならないのは、デフォルトセッションがすでに開いているデータベースに対して、そのコンポーネントが同時に問い合わせを実行する場合だけです。この場合、それぞれの問い合わせが、問い合わせ自身のセッション下で実行されなければなりません。マルチスレッドのデータベースアプリケーションではスレッドごとにセッションを持つため、この場合も複数のセッションが必要になります。
必要であればアプリケーションで追加セッションコンポーネントを作成できます。BDE ベースのデータベースアプリケーションには、すべてのセッションコンポーネントを管理できる、Bde.DBTables.Sessions というセッションリストコンポーネントが自動的に提供されます。複数セッションの管理については、「複数のセッションの管理」を参照してください。
セッションコンポーネントをデータモジュールに入れても問題はありません。ただし、セッションコンポーネントが 1 つでも含まれているデータモジュールをオブジェクトリポジトリに入れた場合、ユーザーがそれから継承するときに名前が衝突しないように、AutoSessionName プロパティを True に設定してください。