参数太少。 (1)预期

时间:2015-06-26 18:46:05

标签: sql vba ms-access parameters access-vba

我使用VBA将参数传递给存储的查询,但不断收到错误。这是存储的查询:

 
PARAMETERS Parm1 Long;
UPDATE tJ010_SRP4Codes INNER JOIN tZ100_VendorProfiles 
ON tJ010_SRP4Codes.SRP4Code = tZ100_VendorProfiles.JdeSRP4Code 
SET tJ010_SRP4Codes.Vendor = 'TEST'
WHERE ((([Parm1]=tZ100_VendorProfiles.VendorID)));

以下是调用查询的VBA:

 
Dim Parm1 As Long
db.QueryDefs(!QueryName).Parameters(Parm1) = intVdrProfileID
db.Execute !QueryName, dbFailOnError

我已尝试使用和不使用"参数......"存储的查询中的行。两种方式都有相同的错 存储的查询可以正常工作,而不是从VBA调用时。

1 个答案:

答案 0 :(得分:2)

使用DAO.QueryDef对象,提供参数值,然后执行QueryDef

Dim qdf As DAO.QueryDef
Set qdf = db.QueryDefs(!QueryName)
qdf.Parameters("Parm1").Value = intVdrProfileID
qdf.Execute dbFailOnError

Parameters("Parm1")表示名为 Parm1 的参数。如果没有引号Parameters(Parm1),Access会将 Parm1 解释为变量。如果你没有这样的变量,那就会引发错误。

也可以通过数字而不是名称来识别参数。编号从零开始,因此Parameters(0)表示第一个参数。

注意我假设!QueryName是记录集值,并且是已保存查询的名称。我不知道 intVdrProfileID 的来源,但假设它对参数值有效。