2017-02-08 214 views
2

another answer on hereがこの問題に対処しましたが、それは役に立ちませんでした。参照しようとしているクエリを確認したところ、どのフィールドでも問題は発生しません。私は、オブジェクトや宣言をどのように宣言して設定したかで遊んだが、それもうまくいかなかった。VBAでAccessでレコードセットを開こうとすると「パラメータが少なすぎます」

Dim dbsCurrent As DAO.Database 
Dim rst As DAO.Recordset 

Set dbsCurrent = CurrentDb 
Set qdf = CurrentDb.QueryDefs("qry_FilmZip") 
Set rst = qdf.OpenRecordset 'The error points to this line 

rad_full = rst!radius_full 

MsgBox ("rad_full:" + rad_full) 

アップデート:私は.OpenRecordSet方法にこのようなクエリの名前を与えてみました:Set rst = qdf.OpenRecordset("qry_FilmZip")

を...しかし、今では私に新しいエラー与える:​​を。誰が何が起こっているのか知っていますか?エラーは同じ行を指しています。

2番目のエラーを解決する方法を見つけました。それは私が

For Each prm In qdf.Parameters 
    prm.Value = Eval(prm.Name) 
Next prm 

をしなければならなかったことが判明...しかし、私はこれは本当に何をしているのか理解していません。誰かが私を啓発できますか?

SQL:

SELECT 

    tbl_FilmZipInfo.ID, 
    tbl_FilmZipInfo.item, 
    tbl_FilmZipInfo.qty_per_unit, 
    tbl_FilmZipInfo.unit_of_measure, 
    tbl_FilmZipInfo.radius_core, 
    tbl_FilmZipInfo.radius_full, 
    tbl_FilmZipInfo.Lf_value_for_zipper, 
    tbl_FilmZipInfo.S_value_for_zipper, 
    tbl_FilmZipInfo.film_or_zip, 
    tbl_FilmZipInfo.Comments, 
    tbl_FilmZipInfo.physical_description 

FROM 

    tbl_FilmZipInfo 

WHERE 

    (((tbl_FilmZipInfo.item)=[Forms]![frm_FilmZip]![Text314])); 
+1

をqdf.OpenRecordset() '@Tomが指摘するように。 – Gustav

+0

'パラメータが少なすぎます。'というクエリーでは、受信しなかったパラメータが必要です。私はあなたがSQLを投稿することをお勧めします... – marlan

+0

@marlanはSQLを追加しました – user7389351

答えて

2

出典:https://msdn.microsoft.com/en-us/library/office/ff820966.aspx

ここでの唯一の必須の引数は開きたいレコードセットの名前です。あなたのようなパラメータクエリで

expression .OpenRecordset(Name, Type, Options, LockEdit)

は、次の構文を使用する必要があります。

Dim dbs As DAO.Database 
Dim qdf As DAO.QueryDef 'You don't dim your qdf 
Dim rst As DAO.Recordset 

Set dbs = CurrentDb 

'Get the parameter query 
Set qfd = dbs.QueryDefs("qryMyParameterQuery") 

'Supply the parameter value 
qdf.Parameters("EnterStartDate") = Date 
qdf.Parameters("EnterEndDate") = Date + 7 

'Open a Recordset based on the parameter query 
Set rst = qdf.OpenRecordset() 'Note the brackets here 

また、ここでは、次のタイプ試みることができる:それは `RST =を設定している

Dim dbs As DAO.Database 
Dim rsTable As DAO.Recordset 
Dim rsQuery As DAO.Recordset 

Set dbs = CurrentDb 

'Open a table-type Recordset 
Set rsTable = dbs.OpenRecordset("Table1", dbOpenTable) 

'Open a dynaset-type Recordset using a saved query 
Set rsQuery = dbs.OpenRecordset("qryMyQuery", dbOpenDynaset) 
+0

私が使用している保存されたクエリは、パラメータを要求しません。いずれかのフィールドでは、「Cirteria」フィールド(デザインビュー)を使用してフォームから値を取得します。それはパラメータと同じですか? – user7389351

+0

クエリがフォームからの値にアクセスできない場合、フィールドはパラメータとして扱われます。このフォームはロードされていますか? inはどこにあるべきですか? – marlan

関連する問題