我在 Access 2003 数据库(在 Access 2007 中开发)中有三个表单,它们处于父级 -> 子级 -> 孙级关系。在子窗体的“Form_Load”子窗体中,我设置了孙窗体的一些属性(窗体标题、行源和控制逻辑)。当我查看子表单时,一切正常。当我查看父表单时,出现错误:
运行时错误“2455”:您输入的表达式对表单/报告属性的引用无效。
参考该行:
Me.GrandchildFormName.Form.Foo.Caption = "bar"
我可以访问孙子表单的任何属性(除了 Form 属性),而不会引发任何错误。有谁知道可能是什么原因造成的?我在一个新数据库中做了一个测试用例,它工作得很好,所以我倾向于在我随数据库继承的遗留代码中存在一些东西(据我所知,这可以追溯到 18 年前的 Access 之前)数据库系统)导致了问题,但我想我应该在这里检查一下,看看你们中是否有人知道解决方法。
如果相关的话,表单的实际结构有点复杂,孙子表单在子表单中多次出现(在不同的控件名称下),如下所示:
|--------------|
| A |
| |----------||
| | B ||
| | |------|||
| | | C[1] |||
| | |------|||
| | ||
| | |------|||
| | | C[2] |||
| | |------|||
| |----------||
|--------------|
消除除一种孙子形式之外的所有形式并不能解决问题。
如果有一种方法可以让孙子表单知道它正在加载为哪个实例,我可能可以编写代码来解决该问题,但据我所知,这是不可能的。
我会用Parent
, Child
, and GrandChild
用于引用相应的表格(而非数据源)。
一般来说Form
仅在显示子窗体后,子窗体控件的属性才获得“有效引用”。因此,如果您想执行中的代码Child.Form_Load
,你必须确保GrandChild
当Parent
opens.
Solution
因为我假设在你的情况下GrandChild
如果你打开就可见Child
(无需打开Parent
) but GrandChild
打开时不可见Parent
,我建议在不更改用户界面的情况下使用以下解决方案:
移动代码Child.Form_Load
,它访问GrandChild.Form
, into GrandChild.Form_Load
。每当GrandChild
加载它可以访问所有内容Child
(Me.Parent.Form
) 甚至Parent
(Me.Parent.Parent.Form
).
换句话说GrandChild
必须提取信息(来自Child
or Parent
)并改变自身而不是Child
将信息下推至GrandChild
通过改变GrandChild
.
Example:
比方说Parent
具有 1:n 关系Child
and Child
具有 1:n 关系GrandChild
. Parent
礼物Child
作为数据表GrandChild
不显示时不显示Parent
打开。在这种情况下,任何访问GrandChild.Form
结果是2455 运行时错误 since GrandChild
未显示。
在此示例中,每一行Child
数据表会有一个加号,可以显示GrandChild
。假设您放置了一个按钮Parent
它执行您当前的代码Child.Form_Load
子。点击此按钮后Parent
打开会导致错误(见上文),但如果您单击中的加号之一Child
然后单击按钮,代码将在没有2455 错误因为在这种情况下GrandChild
在之前可见GrandChild.Form
访问已执行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)