【问题标题】:Access runs function in control's RowSource when form opened in Design View在设计视图中打开表单时访问控件 RowSource 中的运行功能
【发布时间】:2018-07-06 14:28:56
【问题描述】:

我有一个 Access 2007 表单,其中包含一个带有以下行源的组合框:

SELECT qryProjectsIHaveAccessTo.projID, qryProjectsIHaveAccessTo.projName 
FROM qryProjectsIHaveAccessTo 
WHERE (((qryProjectsIHaveAccessTo.projSupportTracker)=False));

查询qryProjectsIHaveAccessTo 使用用户定义的函数作为其中一列的条件。此函数检测是否已运行 Startup 例程,如果没有运行它。

我遇到的问题是:如果我 SHIFT+open 数据库并以 DESIGN 模式打开表单,由于某种原因,用户定义的函数开始运行。这会导致错误,因为它调用的 Startup 例程试图打开一个表单(大概是 Access 在设计模式下打开另一个表单的过程中无法打开一个表单),有时我无法 CTRL+BREAK 退出。

当我在设计模式下保存表单时也会发生同样的事情。

如果我从组合框中删除 RowSource 字符串,则不再发生这种情况。但是为什么在设计模式下打开表单时会触发在控件 RowSource 中包含的查询中调用的函数?

有什么想法吗?感谢阅读!

【问题讨论】:

  • 为什么不简单地将该函数的调用移到它所属的位置:表单的 OnLoad 事件?
  • 确实这很奇怪,但需要更多信息来排除故障。让查询运行启动过程可能不是一个好主意。也许与其让您的查询以不受支持的方式运行代码,不如使用AutoExec macro 或默认表单的打开事件来检查和/或运行您的启动过程。
  • 或者在OnLoad事件中分配控件的RowSource?仍然没有解决你正在做的事情的“原因”。

标签: vba ms-access ms-access-2007 startup designmode


【解决方案1】:

当您在设计视图中打开表单时,Access 会验证表单记录源是否仍然存在,并且绑定到表单控件的所有查询字段是否仍然存在。

如果其中一些检查失败,Access 会在有问题的绑定控件上显示绿色小三角形。

在执行此检查时,它会在查询中运行 UDF。

正如 cmets 中所说,调用启动函数在很大程度上不属于从查询中调用的 UDF。将其放入由AutoExec 宏调用的函数中。

【讨论】:

    猜你喜欢
    • 2016-06-22
    • 1970-01-01
    • 2018-11-11
    • 1970-01-01
    • 2016-02-10
    • 2020-02-16
    • 1970-01-01
    • 1970-01-01
    • 2013-05-27
    相关资源
    最近更新 更多