■DAOは「Data Access Object」の略でAccessのデータベースエンジンである jetデータベースエンジン に直接接続して、データを操作することのできるオブジェクトライブラリです。
■ADO と DAO の違い
DAOは、jetデータベースエンジンに直接接続するため、単体のAccessシステムを操作するケースに適しています。ADOはAccessに限らず、Microsoft SQL Serverなどのデータベースに接続できる汎用性のはるオブジェクトを提供し、データベースの種類が異なっても同じ手法でレコードを操作できる利点があります。
■DAOの特徴
DAOにはテーブルやクエリを作成する機能があるが、ADOにはテーブルやクエリを作成する機能はなく、ADOXというADOの拡張機能を使用する必要がある。
また、DAOはレコードセットの操作やトランザクションの管理等、ADOで行うことのできる処理の多くを実行することが可能。
■DAOを使用するには
参照設定は不要。
■DAOの宣言について
DAOとADOには同じ名前のオブジェクトが数多く存在する為、明示的に以下の様に宣言すると、参照設定で優先してライブラリが参照されます。
Dim RS AS ADODB.Recordset Dim RS AS DAO.Recordset
■データベースへの接続
【カレントデータベースに接続する場合】
Dim DB AS DAO.DB Set DB = CurrentDB
【カレント以外のデータベースに接続する場合】
Dim DB AS DAO.DB Set DB = OpenDatabase("データベースのファイルパス")
■SQLの実行
以下の構文で実行できる。「クエリ」の部分にはクエリ名またはSQL文を記述する。
DB.Execute クエリ
■レコードセットに格納する
Private Sub btn_実行_Click() 'SQL格納用変数 Dim strSQL As String 'SQL文生成 strSQL = "SELECT " & _ "T_販売データ.fld_販売ID" & _ ",T_販売データ.fld_販売日" & _ ",T_販売データ.fld_商品ID" & _ ",T_商品マスター.fld_商品名" & _ ",T_販売データ.fld_数量" & _ ",T_販売データ.fld_売価" & _ ",T_社員マスター.fld_社員名 " & _ "FROM T_商品マスター INNER JOIN " & _ "(T_社員マスター INNER JOIN T_販売データ " & _ "ON T_社員マスター.fld_社員ID = T_販売データ.fld_社員ID) " & _ "ON T_商品マスター.fld_商品ID = T_販売データ.fld_商品ID " & _ "WHERE T_販売データ.fld_商品ID = 'BL05-01' " & _ "AND T_販売データ.fld_販売日 = #2019/01/10# " & _ "ORDER BY T_販売データ.fld_販売ID;" 'データベースオブジェクトの宣言 Dim daoDb As DAO.Database '現在のデータベースをセット Set daoDb = CurrentDb 'レコードセットオブジェクトを宣言 Dim daoRs As DAO.Recordset 'SQLでレコード読込 Set daoRs = daoDb.OpenRecordset(strSQL) 'レコード数を格納する変数を宣言 Dim rsCnt As Long '繰り返し処理用カウンタ変数の宣言 Dim i As Long 'レコードが存在しない場合の処理 If daoRs.BOF = True And daoRs.EOF Then MsgBox "対象レコードがありません", vbExclamation, "確認" '接続解除の工程へジャンプ GoTo Finally Else '最後のレコードへ移動 daoRs.MoveLast '現在地のレコード数を代入 rsCnt = daoRs.RecordCount 'レコードの先頭へ移動 daoRs.MoveFirst End If 'レコードの先頭から末尾まで繰り返し処理 For i = 1 To rsCnt Debug.Print _ daoRs!fld_販売ID, daoRs!fld_販売日, daoRs!fld_商品ID, _ daoRs!fld_商品名, daoRs!fld_数量, daoRs!fld_売価, daoRs!fld_社員名 '次のレコードへ移動 daoRs.MoveNext Next i '行ラベルを付けておく Finally: daoRs.Close Set daoRs = Nothing daoDb.Close Set daoDb = Nothing End Sub