マルチスレッドで MSSQL dbExpressドライバを使用する

By: Chikako Yonezawa

Abstract: Delphi 2007 MSSQL dbExpress ドライバをマルチスレッドで使用するために、COM のcoinitialize や couninitialize が、このドライバで使用するすべてのスレッドからコールされます。

マイクロソフト社の SQL Server向け dbExpressドライバは、ロードされる際、自動的に coinitializeを呼び出します。

最初の coinitializeの呼び出しが成功すると、ドライバは

  1. ドライバがアンロードされる際、couninitializeを呼び出します。
  2. 新しく接続が作成される際、coinitializeを呼び出します。
  3. 接続が閉じられる際に、counitializeを呼び出します。

ドライバによって自動的に行われるすべての coinitialize呼び出しには、アパートメントスレッティングモデルが使われます。

もし、異なるスレッティングモデルが必要とされるか、マルチスレッドアプリケーションでこのドライバを使用した際にいくつかの問題があるのであれば、アプリケーションが、このドライバを使用するすべてのスレッドに対してに coinitializeおよび couninitializeを呼び出すのが最善の方法です。

  1. アプリケーションが開始する際に coinitializeを、アプリケーションが終了する前に couninitializeを呼び出します。
  2. 2番目のスレッドが開始する際に coinitializeを、2番目のスレッドが終了する前に couninitializeを呼び出します。

Server Response from: ETNASC03