
✅ はじめに
Access VBAやExcel VBAでデータベースに接続・操作する際、登場する2つの技術が
DAO(Data Access Objects) と ADO(ActiveX Data Objects) です。
「どっちを使えばいいの?」「そもそも何が違うの?」「両方使ってもいいの?」
そんな疑問を持つ方のために、ADOとDAOの違い・使い分け・共存の可否についてわかりやすく解説します。
■ ADOとDAOの基本的な違い
項目 | DAO(Data Access Objects) | ADO(ActiveX Data Objects) |
---|---|---|
主な用途 | Accessの内部テーブル・クエリ操作向き | 外部DB(Oracle, SQL Server)向き |
対象 | Jet/ACEエンジン(mdb/accdb) | OLE DB 経由の汎用DB |
構文の簡潔さ | Access専用なので扱いやすい | 柔軟だがやや複雑 |
参照設定名 | Microsoft Office xx.0 Access Database Engine Object Library (または DAO 3.6) |
Microsoft ActiveX Data Objects x.x Library |
SQLサポート | クエリやテーブル名が通じやすい | 外部DBに強く柔軟なSQL構文が使える |
推奨場面 | Access単体アプリ、軽量データ処理 | システム間連携、外部DB接続、汎用化 |
■ 使い分けの目安
- Accessの中のデータ(テーブル・クエリ)だけ扱いたい → DAO
- OracleやSQL Server、MySQLと連携したい → ADO
- フォームやレポートと密接に連携する処理 → DAOが楽
■ 実際のコード比較
DAOでデータ取得(Accessテーブル)
Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = CurrentDb()
Set rs = db.OpenRecordset("SELECT * FROM 社員マスタ", dbOpenDynaset)
If Not rs.EOF Then
MsgBox rs!社員名
End If
rs.Close: Set rs = Nothing
ADOでデータ取得(外部DB)
Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Set conn = New ADODB.Connection
conn.Open "Provider=SQLOLEDB;Data Source=...;Initial Catalog=...;User ID=...;Password=..."
Set rs = New ADODB.Recordset
rs.CursorLocation = adUseClient
rs.Open "SELECT * FROM 社員マスタ", conn, adOpenStatic, adLockReadOnly
If Not rs.EOF Then
MsgBox rs!社員名
End If
rs.Close: conn.Close
Set rs = Nothing: Set conn = Nothing
■ ADOとDAOは共存できるのか?
〇 結論:共存は可能です!
同じプロジェクトで両方使っても問題ありません。
ただし、Recordset など名前が重複するオブジェクトがあるため、必ずライブラリを明示的に指定しましょう。
例:
Dim rs1 As DAO.Recordset
Dim rs2 As ADODB.Recordset
〇 共存時の注意点
ポイント | 内容 |
---|---|
参照設定 | 両方のライブラリにチェックを入れる |
型の衝突 | Recordset や Connection は必ず DAO. / ADODB. を明示する |
パフォーマンス | 両方を頻繁に切り替えると若干重くなることもある |
可読性 | 両方使うとコードが混乱しやすくなる。なるべく役割分担を意識する |
■ 実務でのおすすめ戦略
- Access単体アプリならDAOで完結がシンプル
- 外部システム連携や汎用化を意識するならADOが便利
- 既存資産にADOを追加する場合は、DAOを残して共存で移行ステップを取るのが現実的
■ 関連記事
【Access VBA】OO4OからADOに移行後、SQLは同じなのにフリーズ?原因はカーソル設定
【Access VBA】「Object」と「ADODB.Connection」の違いとは?使い分けの解説
【Access VBA】SQL Serverに直接接続する方法|ADOを使った高速データ処理
■ 関連キーワード
- VBA ADO DAO 違い
- Access DAO ADO 共存
- VBA 外部データベース 接続
- DAO レコードセット ADO 併用
- VBA データ接続 種類 比較
- ADODB DAO 同時使用