尝试从子窗体访问孙窗体时出现 Microsoft Access 运行时错误 2455

2023-11-29

我在 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,你必须确保GrandChildParent 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(使用前将#替换为@)

尝试从子窗体访问孙窗体时出现 Microsoft Access 运行时错误 2455 的相关文章

随机推荐