如何像评估 excel 中的公式一样评估 Access 中的表达式

How to evaluate an expression in Access like evaluating a formula in excel

有没有办法像我们可以在 Excel 中计算公式那样在 Access 中计算表达式?我的 Dlookup 一直是第二名,我不知道挂断在哪里。

=Nz(DLookUp("[RemanChangePoint]![ID]","[RemanChangePoint]","[NewPartNum]  Like '*" & [LegacyPN1] & "*' Or [NewPartNum] Like '*" & [LegacyPN2] & "*'"),"")

还有 10 个 LegacyPN,我希望获得包含 LegacyPN 的记录 ID 或空白。之前,我没有像上面那样做,而是在做:

Like & Chr(34) & "*" & [LegacyPN#] & "*" & Chr(34) & " Or..."

每次都会得到2。但是现在有了缩短的版本,它每次都会导致空白,即使有带有零件号的记录。

我在不同的表单上有一个类似的表达式,但只有一个 LegacyPN 用作查找,所以它有效。我认为问题出在大量的 Or 语句上,但我不明白为什么它不起作用,因此需要像 Excel 这样的表达式求值器。

或者(问一个稍微不同的问题可能有点粗鲁)

有没有办法使用附件的文件名作为Dlookup的标准?这可能比通过 LegacyPN 更有效,我只是无法通过表达式构建器弄明白。

您的第一个 DLookup where 子句引用当前表单上的字段,因为双引号导致表达式脱离 where 子句并进入 ControlSource 的范围。

这意味着像下面这样的内容将被传递到 DLookup 函数中,因为表达式的 [LegacyPN] 部分是在调用 DLookup 之前在表单的上下文中计算的:

[NewPartNum]  Like '*1*' Or [NewPartNum] Like '*2*'

...其中 1 和 2 是当前表单中 [LegacyPN1] 和 [LegacyPN2] 的值。

如果您希望 DLookup where 子句中的 [LegacyPN] 字段引用 DLookup 查询的 [RemanChangePoint] table,那么您需要修复引号:

=Nz(DLookUp("[RemanChangePoint]![ID]","[RemanChangePoint]", "[NewPartNum]  Like '*' & [LegacyPN1] & '*' Or [NewPartNum] Like '*' & [LegacyPN2] & '*'"),"")

您的第二种语法应该也有效,因为 Chr(34) 添加了一个双引号,导致这个最终字符串被传递给 where 子句中的 DLookup 函数:

Like & "*" & [LegacyPN] & "*" & " Or..."

其中 [LegacyPN] 字段指的是 DLookup 查询中的 table,而不是当前表单。所以我不确定为什么那行不通。注意:单引号或双引号在此上下文中都可以,但不能混用。

双引号在 CountrolSource 属性(和其他地方)的函数参数中变得棘手。