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 |
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 |
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 |
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 |
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! |
Message
-----------------
Hello, DAO World!
Tags: DAO
Categories: DAO, VBA