MS Access - “找不到名称...在表达式中”错误 - IIf CDbl语句

时间:2017-01-23 14:12:32

标签: ms-access version-control autoexec

我的问题

我有一个相当直接的autoexec宏来执行我的分割数据库的版本控制检查。我在前端有一个名为LocalVersionNumber的表,后端有一个名为LiveVersionNumber的表。每个版本号可能有多个值(例如,正在使用哪个版本的后端,哪个前端等)。因此,这些表中的值将通过查询__LiveVersionParser_Q__LocalVersionParser_Q进行解析。在不浪费太多细节的情况下,本地版本号应始终等于或大于实时版本号。

我写了一个查询,比较了我的本地&实时解析的值 - 并通过IIF表达式,确定更新或保持当前版本的逻辑。这个测试查询运行没有问题,但现在我已经将逻辑拉入autoexec宏并且我收到了错误:

  

找不到您输入的名称'__LiveVersionParser_Q'   表达

我已经仔细检查了,表格和字段拼写正确。我甚至将宏中的语句复制并粘贴回查询,并且查询仍能正常执行。

守则

(在Macro Builder中不是VBA - 呃)

“IF”行动

CDbl([__LiveVersionParser_Q].[DevelopmentVersion])
    <=CDbl([__LocalVersionParser_Q].[DevelopmentVersion])

然后......执行我的更新前端逻辑。

注意:对于那些询问“为什么要使用CDbl?”的人,使用它是因为版本号是一个文本字符串,其中多个值以“。”分隔。在解析版本之后,然后通过将它们转换为double(使用CDbl)来比较这些字符串,以查看哪个更大。

故障排除

正如我之前所说,这个陈述是有效的,而不是在这个宏中。我通过使用以下查询来解决它(为了保持一致,这是我测试的'design'视图表达式而不是SQL):

Expr1: IIf(CDbl([__LiveVersionParser_Q].[DevelopmentVersion])
               <=CDbl([__LocalVersionParser_Q].[DevelopmentVersion]),"OK","UPDATE")

有什么建议吗?我觉得我错过了一些简单的东西。

1 个答案:

答案 0 :(得分:0)

我找到了一种解决方法(不是根本原因和解决方案)。 如果有人能够正确解释根本原因,我很乐意将答案余额转交给他们!

但与此同时,如果其他人遇到类似的问题,这是我的解决方法:

第1步: 正如我的问题所述,我有一个运行&#34; IF&#34;行动完全没问题。所以我用它输出一个Result字段,表示&#34; OK&#34;或&#34;更新&#34;。

第2步: 我将autoexec宏更改为如下:

IF...
    DMax("Result","__VersionControl_FinalTest")="Update"
THEN...
    Run my update code.
ELSE...
    CancelEvent
END IF

注意:我试图使用简单的声明:

IF...
    [__VersionControl].[Result] = "Update"

然而,当我运行该宏时,我再次收到错误2482(&#34;找不到名称......&#34;)。

为什么DMax能够找到&#39; __VersionControl_FinalTest查询和IF语句不能,我不知道 - 但至少我已经备份并运行了。