Archive for 9月 12th, 2012
-
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!