プロが教える店舗&オフィスのセキュリティ対策術

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ったのですが、
見つかりませんでした。

A 回答 (2件)

日別売上クエリ を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


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

パラメータ名が同じなら、クエリ内のすべてのパラメータに自動的に値が与えられます。
    • good
    • 0
この回答へのお礼

なるほど、了解です。

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

お礼日時:2010/12/07 03:41

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 の引数などについては
ヘルプで確認してください。
    • good
    • 0
この回答へのお礼

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

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

お礼日時:2010/12/05 07:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!