【发布时间】:2016-08-04 14:57:27
【问题描述】:
我已经为此工作了大约一个小时,但无法让函数在没有错误的情况下运行。我正在使用来自 this 页面的 Allen Browne 的 ELOOKUP 函数。
这里是当前调用公共函数的代码:
Dim r As Double
Dim Q1 As Double
Dim i1 As Double
r = Me!txtRepeat
Q1 = Me!txtQty1
i1 = ELookup("dblIndex", "zhqry_ActiveGrid_3_Final", "dblRepeat = " & r & " AND dblQuantity <= " & Q1, "dblQuantity DESC")
我收到错误“参数太少:预期为 1。”
我已经单步执行了代码,并且能够提取 strSQL,它是:
SELECT TOP 1 dblIndex
FROM zhqry_ActiveGrid_3_Final
WHERE dblRepeat = 12 AND dblQuantity <= 55
ORDER BY dblQuantity DESC;
在 ELOOKUP 函数的这一行抛出了实际的错误:
Set rs = db.OpenRecordset(strSql, dbOpenForwardOnly)
我试过了:
- 将所有字段名称封装在方括号中。同样的错误。
- 在我的标准值周围添加单引号。同样的错误。
- 将函数行:
Set db = DBEngine(0)(0)更改为set db = CurrentDb,同样的错误。 - 将
dbOpenForwardOnly更改为dbOpenSnapshot。同样的错误。
我将 strSQL 值复制到 Access 的查询构建器中,它运行良好,所以我知道我正在构建一个有效的字符串。我正在使用 Access 2010。
我做错了什么?
【问题讨论】:
-
嗯,你试过
Set rs = db.OpenRecordset(strSql) -
@GaryEvans 刚刚试过,同样的错误。
-
zhqry_ActiveGrid_3_Final(或它的子查询)是否有参数,例如Forms!myForm!myValue?在 Access 中打开查询时会评估它们,但在其上打开记录集时不会评估它们。 -- 请参阅“ELookup() 的限制:... DLookup() 可以调用表达式服务来解析参数..” -
@Andre 啊,我认为该限制仅适用于“strSQL”。是的,我的堆叠查询有一个表单参考。我需要进行近似匹配,因此 dlookup 不可靠。我会看看我是否可以修改我的代码。谢谢!