我有一个相当直接的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")
有什么建议吗?我觉得我错过了一些简单的东西。
答案 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语句不能,我不知道 - 但至少我已经备份并运行了。