参数太少的OpenRecordset方法问题

时间:2015-09-28 21:41:42

标签: ms-access access-vba ms-access-2007 dao

这个看似简单的问题让我在我的轨道上停了三天了。

我的代码:

Dim rs As DAO.Recordset

Set rs = CurrentDb.OpenRecordset("qryAutoOrder", dbOpenDynaset)

qryAutoOrder是一个选择查询,它可以自行运行并且没有参数(除非查询构建器中的条件计数)。

当代码运行时,它挂在set rs =行并抛出此错误。

  

运行时错误'3061':参数太少。预计1。

我希望代码中有更多内容为查询结果中的每条记录运行一个循环,以便我可以将数据附加到另一个现有的数据库表中,但它当前已被注释掉。

1 个答案:

答案 0 :(得分:2)

OpenRecordset无法解析查询中的表单引用([Forms]![completeRepair]![txtRepairID])。在这种情况下,它被解释为您没有提供值的参数。

所以通过Eval(prm.Name) ...

给它参数值
Dim rs As DAO.Recordset
Dim db As DAO.database
Dim prm As DAO.Parameter
Dim qdf As DAO.QueryDef

'Set rs = CurrentDb.OpenRecordset("qryAutoOrder", dbOpenDynaset)
Set db = CurrentDb
Set qdf = db.QueryDefs("qryAutoOrder")
For Each prm In qdf.Parameters
    prm.value = Eval(prm.Name)
Next
Set rs = qdf.OpenRecordset(dbOpenDynaset)

你实际上并不需要For循环;这就是我按习惯设定这些方式的方式。但你可以给它单个参数值而不是......

qdf.Parameters(0).Value = [Forms]![completeRepair]![txtRepairID]