こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Accessのパラメータクエリを他のクエリから呼ぶ

VBAで日付を指定してSelectするクエリなのですが、同じ処理をたくさんつくるのが嫌なので、
パラメータクエリにしたいのですが、、、
例えば、
日別売上クエリ: Parameters pDate datetime; を持つ 
      (VBAから直接呼ぶのはこれだけ) このクエリは、以下の2つのJoinからなる 
日別レジ別売上クエリ: 下位クエリで、Parameters pDate datetime; を持つ (客数を得るクエリ)
日別部門別売上クエリ: 下位クエリで、Parameters pDate datetime; を持つ (金額を得るクエリ)
共に、Where を日付=pDateとしてます。

そうしておいて、VBAから set rs1=DB1.Openrecordset(”Select  、、、、From  日別売上クエリ(#” & strDate  & ”#) ”)
とやったのですが、ダメでした。
パラメータクエリを他のクエリから呼ぶ構文をお教え下さい。

尚、「パラメータクエリをクエリから呼」や「パラメータクエリをSQLから呼」でGoogleったのですが、
見つかりませんでした。

投稿日時 - 2010-12-05 01:17:49

QNo.6363552

困ってます

質問者が選んだベストアンサー

日別売上クエリ をRecorsetとして開きたいのですよね。
なら、CreateQuery しなくても、そのまま開けばいいですね。

Dim qd As QueryDef
Dim rs As DAO.Recordset
Dim dDate As Date

dDate = #2010/12/05#
Set qd = CurrentDb.QueryDefs("Q_受講者数")
qd.Parameters("pDate") = dDate
Set rs = qd.OpenRecordset


> つまり、それから呼ばれるクエリ内のパラメータにも、自動的に値が与えられるのでしょうか?

パラメータ名が同じなら、クエリ内のすべてのパラメータに自動的に値が与えられます。

投稿日時 - 2010-12-05 10:03:25

お礼

なるほど、了解です。

>パラメータ名が同じなら、クエリ内のすべてのパラメータに自動的に値が与えられます。
明確な解答、ありがとうございました。

投稿日時 - 2010-12-07 03:41:28

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

QueryDef の OpenRecordset を使いましょう。

Dim db1 As DAO.Database
Dim qdf As DAO.QueryDef
Dim rs1 As DAO.Recordset
Dim strDate As String

strDate = "2010/12/05"
Set db1 = CurrentDb
Set qdf = db1.CreateQueryDef("", "SELECT F1, F2 From 日別売上クエリ")
qdf.Parameters("pDate") = strDate
Set rs1 = qdf.OpenRecordset()

のような感じで。

CreateQueryDef、QueryDef の OpenRecordset の引数などについては
ヘルプで確認してください。

投稿日時 - 2010-12-05 02:19:43

お礼

さっそくの回答、ありがとうございます。
qdf.OpenRecordset() というのは、知りませんでした。
やってみます。

ただ、気になるのが、上記の「 qdf.Parameters("pDate") = strDate 」は、
CreateQueryDef("", "SELECT F1, F2 From 日別売上クエリ")で作った、qdfのパラメータにしか効かない(値が与えられない)
ように、僕には思われます。
つまり、それから呼ばれるクエリ内のパラメータにも、自動的に値が与えられるのでしょうか?

投稿日時 - 2010-12-05 07:33:24

あなたにオススメの質問