プロが教えるわが家の防犯対策術!

Access初心者で、独学で頑張っています。
どうしても一人で解決できないので、教えてください。

下記のようなコードを書きましたが、#1で 『PARAMETER句の構文エラーです』 となります。


Dim qd As DAO.QueryDef
Dim rs3 As DAO.Recordset
Dim mySQL As String

Set qd = CurrentDb.CreateQueryDef("")

mySQL = "PARAMETERS [ParaヘッダーID] COUNTER;"

mySQL = mySQL & "SELECT [テーブルA].[明細ID], [テーブルA].[ヘッダーID] " _
& "FROM テーブルA " _
& "WHERE ((([テーブルA].[ヘッダーID])='ParaヘッダーID'));"

With qd
.SQL = mySQL   ' #1 ここで『PARAMETER句の構文エラーです』 となる
.Parameters("ParaヘッダーID") = [TempVars]![tempヘッダーID]
Set rs3 = .OpenRecordset()
End With

(この後、処理を続ける)

やりたいことは、
「テーブルA」から、「ヘッダーID」が一時変数[TempVars]![tempヘッダーID]と一致するデータを抜き出し、後続の処理に使いたいのです。
なお、ヘッダーIDは長整数型で、[TempVars]![tempヘッダーID]をウォッチで確認すると整数が入っていました。

SQLについて、いろいろ調べて試しましたが、なかなか上手く行きません。

どこが違うのかご教授お願いします。

A 回答 (1件)

> PARAMETERS [ParaヘッダーID] COUNTER;



下記サイトを見た感じ、「COUNTER」が意味不明のような。
パラメータの型を指定するので、「Long」では。

http://office.microsoft.com/ja-jp/access-help/HP …
http://msdn.microsoft.com/ja-jp/library/office/f …

あと、クエリもちょいとおかしい感じがするので、まずはAccessのクエリ作成画面を使ったほうが学習しやすいと思います。
    • good
    • 0
この回答へのお礼

osamuyさん、ありがとうございます。

パラメータの型は、
http://www.nurs.or.jp/~ppoy/access/access/acEt01 …
このサイトを見て、いろいろ試してたうちの1つでした。
確かに、Longが正解でした。
また、クエリは、作成画面からSQLビューを使ったのですが、よくわからないままでした。

インターネットで調べては、コピペしながら作っているので、意味も分からず書いているコードも多々ある状況です。
今回は、osamuyさんの助言のおかげで、再度いろいろ調べて試して、やっと、この部分は解決できました。
(この先、行き詰まったら、また質問投稿させてもらいます)

一応、自分の覚書のためにも、コードを載せておきます。

助言頂き、本当にありがとうございました。


Dim qd As DAO.QueryDef
Dim rs3 As DAO.Recordset
Dim mySQL As String

mySQL = "PARAMETERS [ParaヘッダーID] Long;"

mySQL = mySQL & "SELECT [明細ID], [ヘッダーID] " _
& "FROM [テーブルA] " _
& "WHERE [ヘッダーID]=[ParaヘッダーID];"

Set qd = db.CreateQueryDef("", mySQL)

qd.Parameters("ParaヘッダーID") = [TempVars]![tempヘッダーID]

Set rs3 = qd.OpenRecordset()

お礼日時:2013/04/17 09:45

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