Hello, DAO(VBA) World!

Posted on 9月 12th, 2012 by cx20

DAO

DAO(Data Access Object)は、マイクロソフト社が開発した COM ベースの DBMS 接続用 API である。
主に Jet データベース(Access MDB)との接続に用いられるが、ODBC 経由で他の DBMS への接続も可能である。
長い間 DAO は 32bit 版のみしか提供されていなかったが、DAO 12 より 64bit 版が提供されるようになった。

クライアントアプリケーション データベースエンジン 推奨されるデータベース形式
Access 2.0 Jet 2.0 *.mdb (Jet 2.0)
Access 95 Jet 3.0 *.mdb (Jet 3.x)
Access 97 Jet 3.5 *.mdb (Jet 3.x)
Access 2000 Jet 4.0 *.mdb (Jet 4.x)
Access 2002 Jet 4.0 *.mdb (Jet 4.x)
Access 2003 Jet 4.0 *.mdb (Jet 4.x)
Access 2007 ACE 12.0 (32bit) *.accdb (ACE 12.0)
Access 2010 (32bit) ACE 12.0 (32bit) *.accdb (ACE 12.0)
Access 2010 (64bit) ACE 12.0 (64bit) *.accdb (ACE 12.0)
DAO 3.0 Jet 3.0 *.mdb (Jet 3.x)
DAO 3.5 Jet 3.5 *.mdb (Jet 3.x)
DA0 3.6 Jet 4.0 *.mdb (Jet 4.x)
DA0 12 (32bit) ACE 12.0 (32bit) *.accdb (ACE 12.0)
DA0 12 (64bit) ACE 12.0 (64bit) *.accdb (ACE 12.0)
Microsoft.Jet.OLEDB.3.51 Jet 3.5 *.mdb (Jet 3.x)
Microsoft.Jet.OLEDB.4.0 Jet 4.0 *.mdb (Jet 4.x)
Microsoft.ACE.OLEDB.12.0 (32bit) ACE 12.0 (32bit) *.accdb (ACE 12.0)
Microsoft.ACE.OLEDB.12.0 (64bit) ACE 12.0 (64bit) *.accdb (ACE 12.0)

ソースコード(VBA + DAO + Jet データベース)

Option Explicit
 
Sub Main()
    Dim dbe
    Dim db
    Dim rs
 
    Set dbe = CreateObject("DAO.DBEngine.36")
    Set db = dbe.OpenDatabase("Hello.mdb")
    Set rs = db.OpenRecordset("SELECT 'Hello, DAO World!' AS Message")
 
    While Not rs.EOF
        Debug.Print rs(0).Name
        Debug.Print "-----------------"
        Debug.Print rs(0).Value
        rs.MoveNext
    Wend
 
    rs.Close
    db.Close
End Sub

ソースコード(VBA + DAO + ACE データベース)

Option Explicit
 
Sub Main()
    Dim dbe
    Dim db
    Dim rs
 
    Set dbe = CreateObject("DAO.DBEngine.120")
    Set db = dbe.OpenDatabase("Hello.accdb")
    Set rs = db.OpenRecordset("SELECT 'Hello, DAO World!' AS Message")
 
    While Not rs.EOF
        Debug.Print rs(0).Name
        Debug.Print "-----------------"
        Debug.Print rs(0).Value
        rs.MoveNext
    Wend
 
    rs.Close
    db.Close
End Sub

ソースコード(VBA + DAO + ODBC + SQL Server)

Option Explicit
 
Sub Main()
    Dim dbe
    Dim db
    Dim rs
 
    Set dbe = CreateObject("DAO.DBEngine.36")
    Set db = dbe.OpenDatabase("", False, False, _
        "ODBC;Driver={SQL Server};" & _
        "SERVER=(local);DATABASE=master;" & _
        "UID=sa;PWD=P@ssW0rd;")
    Set rs = db.OpenRecordset("SELECT 'Hello, DAO World!' AS Message")
 
    While Not rs.EOF
        Debug.Print rs(0).Name
        Debug.Print "-----------------"
        Debug.Print rs(0).Value
        rs.MoveNext
    Wend
 
    rs.Close
    db.Close
End Sub

ソースコード(VBA + DAO + ODBC + Oracle)

Option Explicit
 
Const dbOpenSnapshot = 4
Const dbSQLPassThrough = 64
 
Sub Main()
    Dim dbe
    Dim db
    Dim rs
 
    Set dbe = CreateObject("DAO.DBEngine.36")
    Set db = dbe.OpenDatabase("", False, False, _
        "ODBC;Driver={Oracle in OraDb11g_home1};" & _
        "DBQ=ORCL;" & _
        "UID=scott;PWD=tiger;")
    Set rs = db.OpenRecordset("SELECT 'Hello, DAO World!' AS Message")
    ' パススルークエリの例(データベース側に依存する SQL を実行する場合)
    'Set rs = db.OpenRecordset("SELECT 'Hello, DAO World!' AS Message FROM DUAL", dbOpenSnapshot, dbSQLPassThrough)
 
    While Not rs.EOF
        Debug.Print rs(0).Name
        Debug.Print "-----------------"
        Debug.Print rs(0).Value
        rs.MoveNext
    Wend
 
    rs.Close
    db.Close
End Sub

実行結果

Message
-----------------
Hello, DAO World!

Tags:

Categories: DAO, VBA

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

WP-SpamFree by Pole Position Marketing