在设计视图中打开表单时访问控件 RowSource 中的运行功能

Posted

技术标签:

【中文标题】在设计视图中打开表单时访问控件 RowSource 中的运行功能【英文标题】:Access runs function in control's RowSource when form opened in Design View 【发布时间】: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?仍然没有解决你正在做的事情的“原因”。 【参考方案1】:

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

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

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

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

【讨论】:

以上是关于在设计视图中打开表单时访问控件 RowSource 中的运行功能的主要内容,如果未能解决你的问题,请参考以下文章

使用框架 4.7.2 运行 SDK 项目的 vs2019 中的控件和表单缺少图标和视图设计器选项

当从一个子调用但另一个子调用时添加控件的子工作

在设计器中打开表单时出错

在 Visual Studio 的设计视图中打开表单 (.cs) 会立即显示未保存的更改

专家 - 表单打开方式不同于设计视图与 MS Access 对象列表

表单视图设计器无法在 Visual Studio 2019 中使用 c# .NET Core 3.1 [重复]