在设计视图中打开表单时访问控件 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) 会立即显示未保存的更改