【问题标题】:OpenRecordset Method Issue With Too few Parameters参数太少的 OpenRecordset 方法问题
【发布时间】:2015-12-26 05:50:10
【问题描述】:

这个看似简单的问题已经让我停了三天。

我的代码:

Dim rs As DAO.Recordset

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

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

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

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

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

【问题讨论】:

  • 查询是否引用表单上文本框的值,或表单上任何类型的控件?
  • 它引用的查询。 completeRFSparts 引用 [Forms]![completeRepair]![txtRepairID]
  • 但是当脚本运行时,表单是打开的,我认为这会在不采取额外操作的情况下传递值。

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


【解决方案1】:

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]

【讨论】:

  • 我什至不会假装理解您对 prm 所做的事情,但它确实可以正常运行。现在在没有 rs.EOF 工作的时候做点什么。
  • 其实我搞错了。现在已修复,但不确定是否会更清晰。 qdf.Parameters 是查询期望的参数集合。 Parameters(0) 是第一个;在这种情况下,唯一的参数。如果您使用For 循环方法,prm.Name 会给您参数“名称” --- [Forms]![completeRepair]![txtRepairID]Eval(prm.Name) 会给您来自[Forms]![completeRepair]![txtRepairID] 的值
  • 太棒了。我非常感谢您的帮助和解释。
猜你喜欢
  • 2018-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多