MS Access - "Cannot Find the Name... In the Expression" 错误 - IIf CDbl 语句
MS Access - "Cannot Find the Name... In the Expression" error - IIf CDbl statement
我的问题
我有一个相当直接的 autoexec 宏来为我的拆分数据库执行版本控制检查。我在前端有一个 table,叫做 LocalVersionNumber
,在后端有一个 table,叫做 LiveVersionNumber
。每个版本号可能有多个值(例如正在使用哪个版本的后端,哪个前端等)。因此,这些 table 中的值通过查询 __LiveVersionParser_Q
和 __LocalVersionParser_Q
进行解析。无需过多浪费细节,本地版本号应始终等于或大于实时版本号。
我写了一个查询来比较我的本地和实时解析值 - 并通过 IIF 表达式,确定更新或保持当前版本的逻辑。此测试查询 运行 没有问题,但现在我已将逻辑拉入 autoexec 宏并且出现错误:
Cannot find the name '__LiveVersionParser_Q' you entered in the
expression.
我仔细检查过,table 和字段拼写正确。我什至将宏中的语句复制并粘贴回查询中,查询仍然正确执行。
代码
(在宏生成器中不是 VBA - 呃)
"IF" 动作
CDbl([__LiveVersionParser_Q].[DevelopmentVersion])
<=CDbl([__LocalVersionParser_Q].[DevelopmentVersion])
然后...执行我的更新前端逻辑。
注意:对于那些询问 "why use CDbl?" 的人,使用它是因为版本号是一个文本字符串,多个值由“.”分隔。解析版本后,通过将它们转换为双精度数(使用 CDbl)来比较这些字符串,以查看哪个更大。
疑难解答
如我之前所述,此语句确实有效,只是不适用于此宏。我已经使用以下查询对其进行了故障排除(为了保持一致,这里是我测试的 'design' 视图表达式而不是 SQL):
Expr1: IIf(CDbl([__LiveVersionParser_Q].[DevelopmentVersion])
<=CDbl([__LocalVersionParser_Q].[DevelopmentVersion]),"OK","UPDATE")
有什么建议吗?我觉得我错过了一些简单的东西。
我找到了解决方法(不是根本原因和解决方案)。 如果有人能正确解释根本原因,我会很乐意将答案转给他们!
但与此同时,如果其他人 运行 遇到类似问题,这是我的解决方法:
第 1 步:
正如我在问题中所述,我有一个查询 运行s "IF" 动作非常好。所以我用它来输出一个 Result
字段,表示 "OK" 或 "Update".
第 2 步:
我将 autoexec 宏更改为如下:
IF...
DMax("Result","__VersionControl_FinalTest")="Update"
THEN...
Run my update code.
ELSE...
CancelEvent
END IF
注意:我尝试使用一个简单的语句:
IF...
[__VersionControl].[Result] = "Update"
但是,当我 运行 那个宏时,我再次收到错误 2482 ("cannot find the name...")。
为什么 DMax 能够 'find' __VersionControl_FinalTest
查询而 IF 语句不能,我不知道 - 但至少我支持并且 运行ning。
我的问题
我有一个相当直接的 autoexec 宏来为我的拆分数据库执行版本控制检查。我在前端有一个 table,叫做 LocalVersionNumber
,在后端有一个 table,叫做 LiveVersionNumber
。每个版本号可能有多个值(例如正在使用哪个版本的后端,哪个前端等)。因此,这些 table 中的值通过查询 __LiveVersionParser_Q
和 __LocalVersionParser_Q
进行解析。无需过多浪费细节,本地版本号应始终等于或大于实时版本号。
我写了一个查询来比较我的本地和实时解析值 - 并通过 IIF 表达式,确定更新或保持当前版本的逻辑。此测试查询 运行 没有问题,但现在我已将逻辑拉入 autoexec 宏并且出现错误:
Cannot find the name '__LiveVersionParser_Q' you entered in the expression.
我仔细检查过,table 和字段拼写正确。我什至将宏中的语句复制并粘贴回查询中,查询仍然正确执行。
代码
(在宏生成器中不是 VBA - 呃)
"IF" 动作
CDbl([__LiveVersionParser_Q].[DevelopmentVersion])
<=CDbl([__LocalVersionParser_Q].[DevelopmentVersion])
然后...执行我的更新前端逻辑。
注意:对于那些询问 "why use CDbl?" 的人,使用它是因为版本号是一个文本字符串,多个值由“.”分隔。解析版本后,通过将它们转换为双精度数(使用 CDbl)来比较这些字符串,以查看哪个更大。
疑难解答
如我之前所述,此语句确实有效,只是不适用于此宏。我已经使用以下查询对其进行了故障排除(为了保持一致,这里是我测试的 'design' 视图表达式而不是 SQL):
Expr1: IIf(CDbl([__LiveVersionParser_Q].[DevelopmentVersion])
<=CDbl([__LocalVersionParser_Q].[DevelopmentVersion]),"OK","UPDATE")
有什么建议吗?我觉得我错过了一些简单的东西。
我找到了解决方法(不是根本原因和解决方案)。 如果有人能正确解释根本原因,我会很乐意将答案转给他们!
但与此同时,如果其他人 运行 遇到类似问题,这是我的解决方法:
第 1 步:
正如我在问题中所述,我有一个查询 运行s "IF" 动作非常好。所以我用它来输出一个 Result
字段,表示 "OK" 或 "Update".
第 2 步: 我将 autoexec 宏更改为如下:
IF...
DMax("Result","__VersionControl_FinalTest")="Update"
THEN...
Run my update code.
ELSE...
CancelEvent
END IF
注意:我尝试使用一个简单的语句:
IF...
[__VersionControl].[Result] = "Update"
但是,当我 运行 那个宏时,我再次收到错误 2482 ("cannot find the name...")。
为什么 DMax 能够 'find' __VersionControl_FinalTest
查询而 IF 语句不能,我不知道 - 但至少我支持并且 运行ning。