ray88’s diary

お仕事で困ったとき用の自分用の覚書

パラメータクエリを実行後、SQLを実行してクエリ実行結果をテーブルに挿入する

関連記事:SQLではなく、レコードセットで挿入したいときはこちら↓
ray88.hatenablog.com

■パラメータクエリの結果をテーブルにインサートするときのコード
 ※通常、パラメータクエリを定義のみだと先にパラメータを指定し、
  QueryDefsでクエリをしていするが、結果を元にSQLを流すときは
  QueryDefsは使わずにCreateQueryDefでクエリ定義を作成した後、
  パラメータ指定してSQLを実行するという順序になる。
  参考URL: 

■ 以下のようなパラメータクエリ「Q_インサート」を作成したとします。
 パラメータはフィールド部分の 担当者:[Offfiser] と
 抽出条件部分の >=[price] の部分
 このクエリにパラメータの値を渡し、実行後にT_テストテーブルの抽出結果を
 T_インサートテスト用 テーブルにSQLを内容流して挿入する処理をします。
f:id:ray88:20200111141924p:plain

■T_テストテーブルのフィルターをかけていない状態は以下
f:id:ray88:20200111143854p:plain
■挿入先テーブル T_インサートテスト用のテーブルは以下
f:id:ray88:20200111144015p:plain
■コードは以下
 ここでは単純にパラメータを”木村さん”、1500 としてますが、実務では変数で
 設定したり、フォームのコントロールで設定したりするようになります。

Sub testDAOinsert()

Dim daoDb As DAO.Database
Dim daoQd As DAO.QueryDef
Dim strSQL As String

Set daoDb = CurrentDb

strSQL = "INSERT INTO T_インサートテスト用 SELECT * FROM Q_インサート用"

Set daoQd = daoDb.CreateQueryDef("", strSQL)

daoQd.Parameters("[Offiser]") = "木村さん"
daoQd.Parameters("[price]") = 1500

daoQd.Execute

End Sub

■実行結果
 パラメータの値もちゃんと反映されています。
f:id:ray88:20200111151533p:plain