在 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