LoginSignup
7
4

【VBA】DAOとADOの違い

Last updated at Posted at 2024-03-21

はじめに

ExcelやAccessからVBAでデータベース接続をする方法を調べていると、
よく目にするのが DAOADO ですよね。

接続方法がちがう?みたいなことは知っていましたが、
今まであまり違いを意識せずに使用していたのでそれぞれの違いをまとめてみました!

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はバージョン番号、数字が大きいものを選択します)

image.png

各コード

DAO

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

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

■ 結果

image.png

若干の差ではありますが、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

7
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
4