ADOとDAOの違いとは?共存できるかも解説

✅ はじめに

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を残して共存で移行ステップを取るのが現実的

■ 関連記事

【OO4O→ADO】SQLは変えてないのにフリーズ

【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 同時使用