こんにちは、Access歴30年のなかぜんです。
今回は、Access VBAでよく登場するDAOとADOの違いや使い分けについて、実務での活用ポイントを交えて解説します。
Access開発で「DAOとADO」…どっちを使えばいいの?
Access VBAを書いていると、「DAOでいいの?ADOが正解?」と迷うこと、ありませんか?
どちらもデータベース操作を行うためのオブジェクトライブラリですが、使いどころにはコツがあります。
この記事では、違いを簡潔に整理しながら、実務で役立つ選び方を「なかぜん」目線でわかりやすく解説します!
DAOとADOの基本的な違い
DAO(Data Access Objects)とは
- Accessネイティブのオブジェクトモデル
- MDB/ACCDB形式に最適化
- フォーム・レポートとの親和性が高い
ADO(ActiveX Data Objects)とは
- OLE DBを介してさまざまなDBに接続可能
- SQL Server・Oracle・外部データソースに強い
- 汎用性が高く、ネットワーク越しでも安定
実際のコードで比べてみよう
DAOでテーブルを読み取る例
' DAO参照が必要(Microsoft DAO 3.6 または 12.0 など)
Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("T_社員")
Do Until rs.EOF
Debug.Print rs!氏名
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
Set db = Nothing
解説:
Access内のテーブルを操作するにはDAOが軽快で安定しています。
ADOで外部SQL Serverに接続する例
' ADO参照が必要(Microsoft ActiveX Data Objects 6.1 など)
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Set cn = New ADODB.Connection
cn.ConnectionString = "Provider=SQLOLEDB;Data Source=サーバー名;Initial Catalog=DB名;User ID=ユーザー;Password=パスワード;"
cn.Open
Set rs = New ADODB.Recordset
rs.Open "SELECT * FROM 社員", cn
Do Until rs.EOF
Debug.Print rs!氏名
rs.MoveNext
Loop
rs.Close
cn.Close
Set rs = Nothing
Set cn = Nothing
解説:
外部DB(SQL Serverなど)に接続する場合は、ADOが圧倒的に柔軟です。
よくあるミスと注意点
- 両方のライブラリを参照設定すると競合が起こる(Recordsetなどが重複)
- 初期化忘れで接続が残り、ファイルロックが起きる
- SQLインジェクションや接続文字列のハードコーディングに注意
業務での使い分けベストプラクティス
状況 | 推奨ライブラリ |
---|---|
Access内のテーブルを操作 | DAO |
SQL Server・外部DBを操作 | ADO |
フォームのレコードソース | DAO |
VBAだけで外部DBと通信 | ADO |
応用ポイント:混在させる場合のコツ
DAOとADOは使い分けが重要ですが、業務では両方を併用することもあります。
その場合、コード中ではオブジェクトを明示的に宣言することが衝突を防ぐコツです。
Dim rsDAO As DAO.Recordset
Dim rsADO As ADODB.Recordset
まとめ:DAOとADOを正しく使い分けて効率UP!
Access開発では、DAOとADOの理解と使い分けが処理速度や保守性に大きく影響します。
今回紹介したポイントを参考に、ぜひ目的に応じたライブラリ選びを実践してみてください。
次のステップ
- ADO接続文字列のバリエーションを知る
- DAOでトランザクション処理を実装してみる
- 混在時のテスト手順をマスターする
それでは、また次回お会いしましょう!
Accessの「なかぜん」でした。
¥2,992 (2025/05/24 20:57時点 | Amazon調べ)
