ADO を使用して Access データベースを開く

Microsoft Office 2000/Visual Basic プログラマーズ ガイド   

ADO を使用して Access データベースを開くには、Connection オブジェクトを使用します。Access データベースを開くには、Jet データベース エンジンを使用する必要があるため、Connection オブジェクトが開かれる前に、必ず ADO が Microsoft Jet 4.0 OLE DB プロバイダを使用するように、Provider プロパティを設定してください。既定では、Microsoft Jet 4.0 OLE DB プロバイダにより、データベースへの接続が共有アクセス モード (Mode = adModeShareDenyNone) で開かれます。次のプロシージャでは、共有アクセス モードの strDBPath 引数により指定されたデータベースへの接続が確立されます。

  Sub OpenDBShared (strDBPath As String)
   Dim cnnDB As ADODB.Connection

   ' Connection オブジェクトを初期化します。
   Set cnnDB = New ADODB.Connection
   ' Microsoft Jet 4.0 Provider を指定し、
   ' strDBPath 変数で指定されたデータベースを開きます。
   With cnnDB
      .Provider = "Microsoft.Jet.OLEDB.4.0"
      .Open strDBPath
      ' データベースで作業するコードをここに挿入します。
   End With

   ' Connection オブジェクトを閉じ、オブジェクト変数を破棄します。
   cnnDB.close
   Set cnnDB = Nothing
End Sub

メモ   Microsoft Visual Studio® 6.0 に付属、および MDAC 2.0 の一部として Web で リリースされた ADO 2.0 より以前のバージョンには、Microsoft Jet OLE DB プロバイダは搭載されていませんでした。ADO 1.5 に対して記述されたすべてのコードでは、Microsoft OLE DB Provider for ODBC (ADO で既定として使用) および Microsoft Access ODBC ドライバが使用されていました。このため、Access データベースを開くために次のようなコードが使用されている可能性があります。

  Set cnn = New ADODB.Connection
strCnn = "driver={Microsoft Access Driver (*.mdb)};dbq=c:\Nwind.mdb"
cnn.Open strCnn

Microsoft OLE DB Provider for ODBC および Microsoft Access ODBC ドライバを指定するコードは ADO 2.1 でもそのまま使用できますが、Access データベースを開くためのこの方法を使用し続けることはありません。Microsoft Jet 4.0 OLE DB プロバイダでは、Jet Database エンジンの機能がさらに多く利用されており、そのためMicrosoft OLE DB Provider for ODBC および Microsoft Access ODBC ドライバよりもパフォーマンスが向上しています。

既定では、Jet OLE DB プロバイダを使用した DAO および ADO では、共有やアップデートが可能なアクセス状態でデータベースが開かれます。ただし、データベースを排他的または読み取り専用モードで開く場合があり、この場合、データベースを開く前に、Connection オブジェクトの Mode プロパティを使用して、開くために使用するモードを明確に指定してください。次のコードでは、ADO を使用してデータベースを共有、読み取り専用で開く方法を示しています。

  Set cnnDB = New ADODB.Connection
With cnnDB
   .Provider = "Microsoft.Jet.OLEDB.4.0"
   .Mode = adModeRead
   .Open strDBPath
End With

Access データベースを開くときに設定が必要な Microsoft Jet 4.0 OLE DB プロバイダに特有なプロパティが数多くあります。たとえば、データベースが専用のパスワードで保護されている場合、Jet OLEDB:Database Password プロパティを使用して、そのデータベースを開くために使用するパスワードを指定してください。次のコードでは、Connection オブジェクトの Properties コレクションを使用してパスワードを指定する方法を示します。

  cnnDB.Properties("Jet OLEDB:Database Password") = "OpenSesame"

次は、プロバイダ独自の初期化プロパティの表ですが、これらのプロパティはMicrosoft Jet 4.0 OLE DB プロバイダを使用する際、Connection オブジェクトの Properties コレクションやOpen メソッドの ConnectionString 引数を使用して設定することが可能です。

プロパティ 説明
Jet OLEDB:Registry Path Jet データベース エンジン設定に使用されるレジストリ サブキーへのパス。この値は二次的な場所に変更することができ、マシン上で Jet を使用している他のアプリケーションとは共有されていない特定のアプリケーションのレジストリの値をこの場所に保存します。

また、サブキーの一部として HKEY_LOCAL_MACHINE を使用しないでください。たとえば、Access 2000 の既定の場所の設定は、次のとおりです。SOFTWARE\Microsoft\Office\9.0\Access\Jet\4.0\Engines

Jet OLEDB:System database ユーザーレベルのセキュリティで保護されているデータベースを開くユーザーの認証に使用する Jet ワークグループ情報ファイル (システム データベース) の場所。このプロパティの設定は、Jet OLEDB:Registry Path プロパティが使用されている場合、レジストリで設定された値や対応する SystemDB の入力値よりも優先されます。この設定には、ファイルへのパスを含めることもできます。
Jet OLEDB:Database Password データベースにデータベース パスワード設定がある場合に、データベースを開くために使用されるパスワード。Open メソッド Password 引数とは同じではないことに注意してください。この引数は UserID 引数と組で使用して、ユーザー レベルのセキュリティで保護されているデータベースを開くためのユーザー アカウントやパスワードの指定に使用されます。
Jet OLEDB:Engine Type このデータベースやファイル フォーマットにアクセスするために使用するデータベース エンジン I-ISAM ドライバを指定する Long 値 (読み取り/書き込み)。ADOX Catalog オブジェクトの Create メソッドを使用して新しいデータベースを作成するとき、この値を使用して新しいデータベースのフォーマットを指定できます。データベースを開いた後は、このプロパティを読み取って、どのファイルバージョンまたはフォーマットを開くかを決定します。エンジン タイプの全リストは、Office 2000 Developer CD-ROM の ODETools\V9\Samples\OPG\Appendixes フォルダにある ADOProperties.doc を参照してください。

初期化プロパティの完全なリストについては、Office 2000 Developer CD-ROM の ODETools\V9\Samples\OPG\Appendixes フォルダにある ADOProperties.doc を参照してください。初期化プロパティに加え、Microsoft Jet プロバイダでは、セッション プロパティと呼ばれる設定を利用できるようになり、この設定は Microsoft Jet データベース エンジンのパフォーマンスを最適化する目的で使用できます。セッション プロパティの詳細については、Office 2000 Developer CD-ROM の ODETools\V9\Samples\OPG\Appendixes フォルダにある ADOProperties.doc の「プロバイダ別 ADO Connection オブジェクト セッション プロパティ」を参照してください。

次のサンプル プロシージャでは、ビルトインの ADO ConnectModeEnum の一覧機能を使用して Mode プロパティを指定し、Access データベースを開くために Connection オブジェクトを作成するときに、データベース パスワード、ワークグループ情報ファイル (システム データベース)、ユーザー ID、ユーザー パスワード、エンジン タイプ (JetOLEDBConstants モジュール内で、ユーザー定義の opgJetEngineType 一覧で指定されたタイプ) などを指定するオプションの引数が含まれています。

  Function GetJetConnection(strPath As String, _
         lngMode As ADODB.ConnectModeEnum, _
         Optional strDBPwd As String, _
         Optional strSysDBPath As String, _
         Optional strUserID As String, _
         Optional strUserPwd As String _
         Optional lngEngineType As opgJetEngineType) _
         As ADODB.Connection
   Dim cnnDB As ADODB.Connection
   
   Set cnnDB = New ADODB.Connection
   With cnnDB
      .Provider = "Microsoft.Jet.OLEDB.4.0"
      .Mode = lngMode
      .Properties("Jet OLEDB:Database Password") = strDBPwd
      .Properties("Jet OLEDDB:System Database") = strSysDBPwd
      .Properties("Jet OLEDDB:Engine Type") = lngEngineType
      .Open ConnectionString:=strPath, _
            UserID:=strUserID, _
            Password:=strUserPwd
   End With

   Set GetJetConnection = cnnDB
End Function

GetJetConnection プロシージャは、Office 2000 Developer CD-ROM の ODETools\V9\Samples\OPG\Samples\CH14 サブフォルダにある DataAccess.mdb サンプル ファイルの OpenDatabase モジュールにあります。