我有一个名为 qryAlloc_Source 的查询,它在一个条件下有两个参数:
>=[forms]![frmReportingMain]![txtAllocStart] And <=[forms]![frmReportingMain]![txtAllocEnd])
A 有一个单独的查询,最终引用 qryAlloc_Source(中间有几个查询),当我在 UI 中双击它时,该查询运行良好,但如果我尝试在 VBA 中打开它,我会收到错误消息。我的代码是:
Dim rst As Recordset
Set rst = CurrentDb.OpenRecordset("qryAlloc_Debits")
我收到运行时错误 3061,参数太少。预期 2。我读到我可能需要使用表单参数在 VBA 中构建 SQL,但鉴于链中有一些查询,这将是非常复杂的 SQL。
关于解决方法的任何建议?我考虑使用 VBA 从查询中创建一个表,然后只引用该表——但我讨厌做额外的步骤。
最佳答案
我知道这已经有一段时间没有发布了,但我想投入我的 tuppence 值(value),因为我一直在寻找这个问题:
可以解析存储的查询:
Set db = CurrentDb
Set qdf = db.QueryDefs(sQueryName)
For Each prm In qdf.Parameters
prm.Value = Eval(prm.Name)
Next prm
Set rst = qdf.OpenRecordset
对于 SQL:
Set db = CurrentDb
Set qdf = db.CreateQueryDef("", "SELECT * FROM MyTable " & _
"WHERE ID = " & Me.lstID & _
" AND dWeekCommencing = " & CDbl(Me.frm_SomeForm.Controls("txtWkCommencing")) & _
" AND DB_Status = 'Used'")
For Each prm In qdf.Parameters
prm.Value = Eval(prm.Name)
Next prm
Set rst = qdf.OpenRecordset
这假设所有参数值都是可 Access 的 - 即表单是打开的并且控件具有值。
关于VBA OpenRecordset Producing 参数太少。预期 2. 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24336077/