AccessVBA:【DAO】クエリ作成・実行(CreateQueryDef)
■DAOでのクエリ作成方法
「CreateQueryDef」メソッドを利用して、Accessにクエリを作成します。
CreateQueryDefはメソッドを作成すると同時にデータベースにクエリが作成されます。
クエリ名を指定しない場合は、一時的なクエリとして作成されます。
■「CreateQueryDefメソッド」でクエリの作成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
Private Sub クエリ作成_Click() Dim CDB As DAO.Database 'DAOデータベース用のオブジェクトを宣言' Dim QD As DAO.QueryDef Dim xSQL As String Set CDB = CurrentDb '現在のデータベースに接続' 'Set CDB = "C:\Users\VBA\Newファイル.accdb"' '他のAccessに接続' xSQL = "SELECT *" xSQL = xSQL & "FROM [T_成績データ]" xSQL = xSQL & "WHERE [点数] >= 80" Set QD = CDB.CreateQueryDef("Q_80点以上", xSQL) 'SQLの内容でクエリを作成する' CDB.Close 'DBを閉じる' Set QD = Nothing Set CDB = Nothing '接続解除' MsgBox "完了" End Sub |
■「CreateQueryDefメソッド」で一時クエリの作成と実行
「CreateQueryDefメソッド」で、クエリ名を設定しない場合は一時クエリとして作成されます。処理が終わるとどこにも存在しなくなります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
Private Sub クエリ実行_Click() Dim CDB As DAO.Database 'DAOデータベース用のオブジェクトを宣言' Dim QD As DAO.QueryDef Dim xSQL As String Set CDB = CurrentDb '現在のデータベースに接続' xSQL = "INSERT INTO [T_成績データ]" xSQL = xSQL & "VALUES (" xSQL = xSQL & "'Q33','山下','理科',99" xSQL = xSQL & ");" Set QD = CDB.CreateQueryDef("", xSQL) 'クエリ名を付けていないので、一時クエリとして作成' QD.Execute 'クエリを実行' CDB.Close 'DBを閉じる' Set QD = Nothing Set CDB = Nothing '接続解除' MsgBox "完了" End Sub |
以下のようにすることで、レコードセットにも格納することができます
1 |
Set RS = QD.OpenRecordset |