【VB6・VBAメモ】DAOの参照先(32bit/64bit)(mdb形式/accdb形式)

32bit・64bit環境でのそれぞれのDAO(Data Access Object)の参照先についてメモしておきます。
Access2007からDAOの参照先が変わったらしく
mdb形式をaccdb形式に変更した場合や、Access(32bit)をAccess(64bit)に変更した場合にDAOが動かなくて焦りました;

バージョン別のDAOの参照先

Access2007より前のバージョンでDAOを使用する場合、以下のライブラリを参照していたかと思います。
 「Microsoft DAO 3.6 Object Library」
Microsoft DAO 3.6 Object Library

Access2007以降、上記を残したまま、以下のライブラリが追加されました。
 「Microsoft Office XX.X Access Database Engine Object Library」
 ※XX.XはExcelのバージョンで異なります。(2007→12.0, 2010→14.0, 2013→15.0) Microsoft Office XX.X Access Database Engine Object Library

「Microsoft DAO 3.6 Object Library」は、mdb形式への接続はAccessが32bitであれば動作するようですが、
Accessが64bitだと動作しない(動作しないどころか参照の選択時にエラーとなる)ようです。
また、accdb形式への接続の場合も動作しないようです。

これらのような場合は「Microsoft Office XX.X Access Database Engine Object Library」へ参照を変更する必要がありそうです。
(こちらであれば全て動くようなので、むしろ早めに移行したほうが無難な気がします)

以下には各環境・拡張子での動作可否を一覧にまとめました。

参照先 Windows(32bit)+Access(32bit)+mdb Windows(32bit)+Access(32bit)+accdb Windows(64bit)+Access(32bit)+mdb Windows(64bit)+Access(32bit)+accdb Windows(64bit)+Access(64bit)+mdb Windows(64bit)+Access(64bit)+accdb
Microsoft DAO 3.6 Object Library × × 参照不可 参照不可
Microsoft Office XX.X Access Database Engine Object Library

Access2007・2010・2013で試しましたが、どれでも同じようでした。
一応、Access2007・2010・2013で同一プロジェクトを使い回しても、自動で切り替わりはするようですが、
Access2003以前との切り替えは手動でやる必要がありそうです。

動作検証

検証:mdb
Sub Sample()
    Dim path As String
    Dim db   As DAO.Database
On Error GoTo proc_err
    '-----------------------------'
    'DBパス'
    path = "D:¥Sample.mdb"

    'DBオープン'
    Set db = OpenDatabase(path)
    
    'DB接続成功'
    Debug.Print "DB接続成功"
    '-----------------------------'
    GoTo proc_end
proc_err:
    Debug.Print Error
proc_end:
    If Not db Is Nothing Then db.Close
    Set db = Nothing
End Sub

[Microsoft DAO 3.6 Object Library]参照
[Windows(32bit)+Access(32bit)+mdb]の場合
DB接続成功

[Microsoft Office XX.X Access Database Engine Object Library]参照
[Windows(32bit)+Access(32bit)+mdb]の場合
DB接続成功

[Microsoft DAO 3.6 Object Library]参照
[Windows(64bit)+Access(32bit)+mdb]の場合
DB接続成功

[Microsoft Office XX.X Access Database Engine Object Library]参照
[Windows(64bit)+Access(32bit)+mdb]の場合
DB接続成功

[Microsoft DAO 3.6 Object Library]参照
[Windows(64bit)+Access(64bit)+mdb]の場合
ActiveX コンポーネントはオブジェクトを作成できません。

[Microsoft Office XX.X Access Database Engine Object Library]参照
[Windows(64bit)+Access(64bit)+mdb]の場合
DB接続成功

検証:accdb
Sub Sample()
    Dim path As String
    Dim db   As DAO.Database
On Error GoTo proc_err
    '-----------------------------'
    'DBパス'
    path = "D:¥Sample.accdb"

    'DBオープン'
    Set db = OpenDatabase(path)
    
    'DB接続成功'
    Debug.Print "DB接続成功"
    '-----------------------------'
    GoTo proc_end
proc_err:
    Debug.Print Error
proc_end:
    If Not db Is Nothing Then db.Close
    Set db = Nothing
End Sub

[Microsoft DAO 3.6 Object Library]参照
[Windows(32bit)+Access(32bit)+accdb]の場合
データベースの形式 'D:¥Sample.accdb' を認識できません。

[Microsoft Office XX.X Access Database Engine Object Library]参照
[Windows(32bit)+Access(32bit)+accdb]の場合
DB接続成功

[Microsoft DAO 3.6 Object Library]参照
[Windows(64bit)+Access(32bit)+accdb]の場合
データベースの形式 'D:¥Sample.accdb' を認識できません。

[Microsoft Office XX.X Access Database Engine Object Library]参照
[Windows(64bit)+Access(32bit)+accdb]の場合
DB接続成功

[Microsoft DAO 3.6 Object Library]参照
[Windows(64bit)+Access(64bit)+accdb]の場合
ActiveX コンポーネントはオブジェクトを作成できません。

[Microsoft Office XX.X Access Database Engine Object Library]参照
[Windows(64bit)+Access(64bit)+accdbb]の場合
DB接続成功



コメント
コメントする








    
この記事のトラックバックURL
トラックバック