Forms MS Access 2007子窗体在formheader上重新加载=可见?

Forms MS Access 2007子窗体在formheader上重新加载=可见?,forms,ms-access,ms-access-2007,Forms,Ms Access,Ms Access 2007,在Access 2007中,我在Access 2003中设计的表单上遇到了奇怪的行为 我有一个未绑定的主窗体和一个数据绑定的子窗体。在主窗体的窗体加载中,我设置了加载子窗体记录集的子窗体sourceobject等。在加载子窗体后,但仍在主窗体的窗体加载中,我设置Me.FormHeader.Visible=True。在这一行运行之后,由于某种原因,子窗体似乎会关闭并重新打开——它的窗体将触发,并再次运行其加载过程 你知道为什么会这样吗?这很烦人,因为它的记录集是基于参数查询的,当它重新加载时,参数

在Access 2007中,我在Access 2003中设计的表单上遇到了奇怪的行为

我有一个未绑定的主窗体和一个数据绑定的子窗体。在主窗体的窗体加载中,我设置了加载子窗体记录集的子窗体sourceobject等。在加载子窗体后,但仍在主窗体的窗体加载中,我设置
Me.FormHeader.Visible=True
。在这一行运行之后,由于某种原因,子窗体似乎会关闭并重新打开——它的窗体将触发,并再次运行其加载过程


你知道为什么会这样吗?这很烦人,因为它的记录集是基于参数查询的,当它重新加载时,参数会被破坏,因此它最终会提示用户输入参数。

有时你不得不忍受(并解决)MS Access的行为,不管它有多奇怪或烦人


在这种情况下,我可能建议您不要使用参数查询,而是使用VBA提示用户输入,将其输入存储在表单级变量中,并在子表单的表单加载事件期间使用该输入设置recordsource。这样,用户只会收到一次提示,而不需要知道表单实际加载了两次。

在设置子表单sourceobject之前,我通过执行
Me.FormHeader.Visible=True
(以及其他主要表单显示设置)暂时解决了这个问题。但我仍然想知道为什么在主窗体上设置属性会导致子窗体重新加载,这对我来说毫无意义。我不确定您的确切情况,但对于绑定到父窗体的子窗体,子窗体的OnCurrent事件会先发生两次。也许这与您遇到的问题有关?谢谢,但我的父窗体没有绑定,所以不完全是我的情况。我的观点是,这也可能发生在您的情况下。您是否调查过子窗体的OnCurrent事件触发的频率?谢谢。我过去也做过类似的事情。但我发现,参数查询+事件(即,当查询参数更新时,子窗体响应父窗体的notify()事件,反之亦然)确实最适合我。不使用参数查询意味着您自己构建SQL字符串,这(1)运行速度较慢,(2)存在SQL注入的潜在风险。此外,构建SQL字符串也是a**中的一个难题,因为您必须以正确的格式转义引号字符并序列化非字符串数据类型,以便Jet SQL理解,等等。这与为任何数据库引擎构建SQL字符串有什么不同?我认为无论数据库引擎如何,手动构建SQL字符串都是不好的做法。但是如果您必须这样做,那么如果您的框架为您进行转义/序列化,而不是每个人都必须进行自己的转义/序列化,那就太好了。