如何在Access中评估表达式,例如在Excel中评估公式

时间:2018-01-19 14:08:12

标签: ms-access ms-access-2013

有没有办法在Access中评估表达式,就像我们可以在Excel中评估公式一样?我的Dlookup继续排在第二位,我无法弄清楚挂机的位置。

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

还有10个LegacyPNs,我希望获得具有LegacyPN的记录的ID或空白。以前,我没有这样做,而是在做:

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

每次都会产生2次。但是现在有了缩短版本,每次都会产生空白,即使有部件号的记录。

我在不同的表单上有一个类似的表达式,但只有一个LegacyPN用作查找,因此它可以工作。我认为问题是众多的Or语句,但它对我来说没有意义,为什么它不起作用,因此对像Excel这样的表达式评估器的需求已经存在。

或者(对于稍微不同的问题,这可能有点粗鲁)

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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

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

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

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

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

其中[LegacyPN]字段引用DLookup查询中的表,而不是当前表单。所以我不确定为什么那不起作用。注意:单引号或双引号在此上下文中可以正常工作,但不能混合使用。

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