たま氏の覚え書き

KNIME・AccessVBA・Swift等、学習したことを覚え書き

AccessVBA_DAOの利用その6_【Database】【QueryDef】【CreateQueryDef】クエリをRecordsetに格納

DAOでデータベースに接続し、作成した一時的なクエリをRecordsetに格納して利用

今回の記述に関する前情報

何を行うか

CreateQueryDefメソッドを使ってQueryDefオブジェクトを作成
一時的なクエリを作成しそれをRecordsetに格納

QueryDefオブジェクトを作成してRecordsetにクエリを格納する書式

Dim QDef As DAO.QueryDef
Dim RST As DAO.Recordset
Set QDef = Databaseオブジェクト変数.CreateQueryDef("",SQL)
Set RST = QDef.OpenRecordset()

記述例における利用パーツ

ステートメント
  →SQL / DoLoop
・メソッド
  →CurrentDb / CreateQueryDef / MoveNext

【実践】クエリを新規作成する記述例

カレントプロジェクトのデータベースに接続する場合の記述

QueryDefオブジェクトにテーブル「飲料リスト」の中の「AA01」「AA02」「AA04」のレコードを参照する一時的なクエリを作成し
それをRecordsetに格納し、格納した内容をイミディエイトに表示する


▼参照テーブル▼


▼記述例▼

Sub createquery4()

Dim DAOdb As DAO.Database
Dim QDef As DAO.QueryDef
Dim RST As DAO.Recordset
Dim SQL As String

Set DAOdb = CurrentDb
SQL = "SELECT * FROM 飲料リスト WHERE 通し番号 In('AA01','AA02','AA06');"
Set QDef = DAOdb.CreateQueryDef("", SQL) 'QueryDefオブジェクトに一時的なクエリを作成
Set RST = QDef.OpenRecordset() 'RecordsetにSQLを格納

Do Until RST.EOF
    Debug.Print RST.Fields("通し番号"), RST.Fields("品目")
    RST.MoveNext
Loop

Set RST = Nothing: Set QDef = Nothing: Set RST = Nothing

End Sub



▼実行結果▼


作成したテーブルを削除する記述

以下の記事を参照、この書き方がとてもシンプルで素敵
AccessObjectを宣言して、Docmd.DeleteObject acQueryか、CurrentDb.QueryDefs.Deleteで削除

▼QueryDefs.Deleteの記述▼
AccessVBAでクエリ(SQL)を作成・削除する | VBA・GAS・Pythonで仕事を楽しく効率化