DAO(Data Access Objects)と ADO(ActiveX Data Objects)は、Access VBA でデータベースに接続・操作するためのライブラリですが、目的・対象・使い勝手にいくつか違いがあります。
目次
✅ DAO と ADO の違いまとめ
項目 | DAO | ADO |
---|---|---|
主な対象 | Microsoft Access(Jet/ACE) データベース | 外部データベース(SQL Server, MySQL 等) |
接続方式 | Access ネイティブ接続(Jet/ACEエンジン) | OLE DB / ODBC 経由 |
パフォーマンス | Access に最適化されて高速 | ネットワーク経由の接続に最適化 |
操作対象 | TableDef, QueryDef, Recordset(ローカル向け) | Connection, Command, Recordset(外部向け) |
接続の自由度 | ODBC接続は弱い | ODBC や DSNレス接続に強い |
適している用途 | Access ファイルの操作、リンクテーブルの管理 | MySQL、SQL Serverなどへの接続とデータ取得 |
サポート形式 | DAO.Recordset(レコード単位) | ADO.Recordset(柔軟、XML対応もあり) |
モダンさ/将来性 | 古いがAccessに最適 | より汎用的で他アプリケーションにも適用可能 |
✅ 使用例の違い
🔹 DAO 例(Access 内部テーブルの操作に適する)
Dim db As DAO.Database Dim rs As DAO.Recordset Set db = CurrentDb Set rs = db.OpenRecordset("顧客マスタ") Do Until rs.EOF Debug.Print rs!氏名 rs.MoveNext Loop rs.Close
🔹 ADO 例(MySQLやSQL Serverと接続する場合)
Dim conn As Object Dim rs As Object Set conn = CreateObject("ADODB.Connection") conn.Open "Driver={MySQL ODBC 8.0 Unicode Driver};Server=localhost;Database=test;User=root;Password=pass;" Set rs = CreateObject("ADODB.Recordset") rs.Open "SELECT * FROM 顧客マスタ", conn Do Until rs.EOF Debug.Print rs.Fields("氏名").Value rs.MoveNext Loop rs.Close conn.Close
🔍 結論:どちらを使うべき?
シーン | 推奨ライブラリ |
---|---|
Access の内部データ操作 | DAO |
MySQL や SQL Server の操作 | ADO |
テーブル定義・リンク管理 | DAO |
DSNレス接続・汎用性重視 | ADO |