如何像评估 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 属性(和其他地方)的函数参数中变得棘手。
有没有办法像我们可以在 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 属性(和其他地方)的函数参数中变得棘手。