在 Access 2007 中更改子窗体的 SourceObject 时失去更改属性的能力

Posted

技术标签:

【中文标题】在 Access 2007 中更改子窗体的 SourceObject 时失去更改属性的能力【英文标题】:Losing ability to change properties when changing SourceObject of subform in Access 2007 【发布时间】:2014-07-25 12:25:54 【问题描述】:

我有一个子表单,它根据用户输入使用Me.SubForm.SourceObject = Query.SomeQuery 更改获取数据的位置。似乎这样做,我失去了设置 BeforeUpdate 属性的能力。

我使用的代码如下:

Forms![PartsDatabase]![RepsSubform].Form![Pack Rank].BeforeUpdate = "=ToTracking()"

我已经确认这在 SubForm.SourceObject 更改之前有效,但之后它会引发以下错误:RTE 2455“您输入的表达式对属性 BeforeUpdate 的引用无效。”

我想知道这是否是一个已知问题,或者我是否只需要修改我的代码来调整。

【问题讨论】:

【参考方案1】:

你把事情搞混了。您永远不应该更改源对象,而应该更改记录源。 Form中涉及的代码是Form级别的。如果您希望使用更新前事件,它属于表单而不是记录源。所以你总是去改变 RecordSource。

你会使用,

Forms!Parentform!SubForm.Form.RecordSource = "SELECT someFields FROM someTable;"

或者,

Forms!ParentForm!SubForm.Form.RecordSource = "yourCompiledQueryName"

【讨论】:

使用 Forms![PartsDatabaseX]![RepsSubform].Form.RecordSource = "Query.SubFormFillerQry" 给我 RTE 2455。 您的查询实际上是否命名为 Query.SubFormFilterQuery?什么是错误描述。您拼写/使用了正确的(子)表单名称吗? 啊,我想我必须保留“查询”。在名字的前面。不幸的是,这导致了我以前工作的代码的其他问题 - 当我尝试在子表单上设置属性时,记录源未设置为最初的状态。它们的形式为 `Forms!ParentForm!SubForm!FieldName.Locked = True。 看起来子表单没有改变它的结构来匹配它的查询 rowsource 被改变,所以字段没有改变 您始终可以使用别名。例如,如果这是一个查询 SELECT yummy FROM foodTable;另一个查询是 SELECT disgusting FROM垃圾表;您可以制作一个常见的别名。 SELECT yummy As newColumn FROM foodTable;并从垃圾表中选择令人作呕的新列;然后将表单控件的源基于此 newColumn,因此即使您更改记录源,它们也将能够查找正确的列。

以上是关于在 Access 2007 中更改子窗体的 SourceObject 时失去更改属性的能力的主要内容,如果未能解决你的问题,请参考以下文章

基于查询的子表单中的字段的 Access 2007 验证帮助

选项卡式控件上的 MS Access 2007 引用子窗体控件返回 null

Access 2007 记录集问题

MS-Access 2007 - 如何在点击事件中以编程方式访问子表单列数据

从 Access 中的另一个子窗体更改子窗体的记录源

Access 2007 使用选项卡将多个子表单链接到主表单的最佳方式