有没有办法在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更有效,我只是无法通过表达式构建器来解决它。
答案 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属性(和其他地方)的函数参数中变得棘手。