はじめに
ExcelやAccessからVBAでデータベース接続をする方法を調べていると、
よく目にするのが DAO と ADO ですよね。
接続方法がちがう?みたいなことは知っていましたが、
今まであまり違いを意識せずに使用していたのでそれぞれの違いをまとめてみました!
DAOとADOって?
DAO(Data Access Objects)
Accessで使用されるデータベースを操作するためのアクセス方法
ADO(ActiveX Data Objects)
外部のデータベースやファイルに接続して操作するためのアクセス方法
DAOは処理がはやい?
DAOはAccessに特化しているのでADOよりも処理が速いそうです。
どれくらい処理速度に差があるのか検証をしてみました。
■ 検証方法
DAOとADOでCSVファイルを取り込むコードを作成します。
同じAccessとCSVファイルを使用し、検証ごとにデータは削除・最適化します。
取り込むCSVファイルは100万行(78MB)のサンプルデータです。
参照設定
DAOとADOを使用するにはそれぞれ事前に「参照設定」を行う必要があります。
参照設定はVBE(Visual Basic Editor)から下記の画像の通りに開くことができます。
それぞれのライブラリファイルにチェックを付けてOKをクリックしてください。
DAO:Microsoft Office x.x Access databese engine Object Library
ADO:Microsoft ActiveX Data Objects x.x Library
(x.xはバージョン番号、数字が大きいものを選択します)
各コード
DAO
Sub DAOインポート_Click()
' 処理時間測定用
Dim stTime As Double
Dim edTime As Double
Dim db As DAO.database
Dim Path As String
Dim File As String
Dim sql As String
' ACCESSに接続
Set db = CurrentDb
' CSVファイル情報取得
Path = CurrentProject.Path
File = "test.csv"
' SQLを実行し、CSVファイルをインポート
sql = "SELECT * INTO T_DAO FROM [" & File & "] IN '" & Path & "' 'Text;HDR=YES'"
db.Execute sql
' 処理時間測定
edTime = Timer
t = edTime - stTime
MsgBox "DAO処理時間:" & t
End Sub
ADO
Sub ADOインポート_Click()
' 処理時間測定用
Dim stTime As Double
Dim edTime As Double
Dim t As String
stTime = Timer
Dim cn As ADODB.Connection
Dim Path As String
Dim File As String
Dim sql As String
' ACCESSに接続
Set cn = CurrentProject.Connection
' CSVファイル情報取得
Path = CurrentProject.Path
File = "test.csv"
' SQLを実行し、CSVファイルをインポート
sql = "SELECT * INTO T_ADO FROM [" & File & "] IN '" & Path & "' 'Text;HDR=YES'"
cn.Execute sql
' 処理時間測定
edTime = Timer
t = edTime - stTime
MsgBox "ADO処理時間:" & t
End Sub
■ 結果
若干の差ではありますが、DAOの方が処理速度は速くなりました!
■処理速度に差が出る理由は?
DAO では「Jetデータベースエンジン」というAccess固有のデータベースエンジンを使用して接続しています。
ADO では「OLE DB」という複数のデータベースへのアクセスを統一化した方法を使用しており、Accessやデータベースに接続しています。
DAOは初期からAccessで使われていたアクセス方法であり、ADOはAccess2000から採用されたアクセス方法です。
DAOはADOよりも古いアクセス方法ではありますが、 DAOはAccessに特化した機能 であるため処理が速くなっています
まとめ(個人的な感想)
結果としてはDAOの処理速度が速かったですが、個人的にそこまで大きな差ではないかなと思いました。(もちろんデータ量にもよりますが)
もっと大きなデータを操作するのであれば処理速度の差が大きくなるかと思いますが、
Access自体の容量の上限が2GBなので、Access内で大きいデータを使用するよりも別の方法を考えた方がいいかなと個人的には思います。
使用するのがAccessのみと決まっている場合はDAO、それ以外にも接続する場合はADOと覚えておくと良いかと思います!
ご案内
株式会社ジールでは、「ITリテラシーがない」「初期費用がかけられない」「親切・丁寧な支援がほしい」「ノーコード・ローコードがよい」「運用・保守の手間をかけられない」などのお客様の声を受けて、オールインワン型データ活用プラットフォーム「ZEUSCloud」を月額利用料にてご提供しております。
ご興味がある方は是非下記のリンクをご覧ください:
https://www.zdh.co.jp/products-services/cloud-data/zeuscloud/?utm_source=qiita&utm_medium=referral&utm_campaign=qiita_zeuscloud_content-area