【问题标题】:MS Access - "Cannot Find the Name... In the Expression" error - IIf CDbl statementMS Access - “无法找到名称...在表达式中”错误 - IIf CDbl 语句
【发布时间】:2017-01-23 14:12:31
【问题描述】:

我的问题

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

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

找不到您在 表达。

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

代码

(在宏生成器中不是 VBA - 呃)

“如果”动作

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

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

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

疑难解答

正如我之前所说,此语句确实有效,只是在此宏中无效。我使用以下查询对其进行了故障排除(为了保持一致,这里是我测试的“设计”视图表达式,而不是 SQL):

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

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

【问题讨论】:

  • 如果字符串中存在多个要转换的点,CDbl会失败。
  • @Gustav - 解析的字符串中没有点。前任。 “134”将是一个结果,而“132”将是另一个结果。逻辑总是在查询中传递。只有宏由于“找不到名称”而出错——这意味着它没有找到容器对象——所以可能是域问题?
  • 好吧,这不是你写的:版本号是一个文本字符串,有多个值用“.”分隔。

标签: ms-access version-control autoexec


【解决方案1】:

我找到了解决方法(不是根本原因和解决方案)。 如果有人可以对根本原因提供适当的解释,我很乐意将答案归于他们!

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

第 1 步: 正如我的问题中所述,我有一个运行“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(“找不到名称...”)。

为什么 DMax 能够“找到”__VersionControl_FinalTest 查询而 IF 语句却不能,我不知道 - 但至少我已经恢复正常运行了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多