【问题标题】:Error with Allen Browne's ELOOKUP: Too Few ParametersAllen Browne 的 ELOOKUP 错误:参数太少
【发布时间】: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)

我试过了:

  1. 将所有字段名称封装在方括号中。同样的错误。
  2. 在我的标准值周围添加单引号。同样的错误。
  3. 将函数行:Set db = DBEngine(0)(0) 更改为 set db = CurrentDb,同样的错误。
  4. 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 不可靠。我会看看我是否可以修改我的代码。谢谢!

标签: vba ms-access


【解决方案1】:

ELookup() 的限制:

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

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

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

【讨论】:

  • 我从未见过“改进” DLookup 的不同尝试的任何真正优势。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-16
相关资源
最近更新 更多