Allen Browne的ELOOKUP错误:参数太少

时间:2016-08-04 14:57:27

标签: vba ms-access

我一直在研究这个问题大约一个小时,并且无法正常运行该功能。我正在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")

我收到错误&#34;参数太少:预期为1。&#34;

我已经完成了代码,并且能够提取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)

我试过了:

  1. 将所有字段名称封装在方括号中。同样的错误。
  2. 在我的条件值附近添加单引号。同样的错误。
  3. 更改了功能行:Set db = DBEngine(0)(0)set db = CurrentDb,错误相同。
  4. dbOpenForwardOnly更改为dbOpenSnapshot。同样的错误。
  5. 我将strSQL值复制到Access的查询构建器中,它运行正常,所以我知道我正在构建一个有效的字符串。我正在使用Access 2010。

    我做错了什么?

1 个答案:

答案 0 :(得分:2)

  

ELookup()的限制:

     

DLookup()可以调用表达式服务来解析参数,例如:
  DLookup(&#34; Surname&#34;,&#34; Clients&#34;,&#34; ClientID = [Forms]。[Form1]。[ClientID]&#34;)

这也适用于用作Domain参数的查询 - 此类参数在Access查询中自动解析,但不在ELookup()使用的记录集中解析。

您可以修改ELookup()以不直接打开记录集,而是从Querydef对象。然后,您可以在QD对象上从this answer调用Eval_Params()来解析参数。