4

我在主窗体上有 2 个子窗体。Sub_2 在列表中显示在 sub_1 中选择的项目的详细信息。对于这两个子表单,我都使用 continue 表单,它们被限制为 2 个查询,有一个共同的字段,比如“id”。

我所做的是在 sub_1 上的 DClick 事件中添加代码以设置 sub_2 的过滤器,如

Me.Parent.sub_2.Form.Filter = "id=" & "'" & Me.Recordset!id & "'"

然后重新查询

Me.Parent.sub_2.Form.Requery

但是没有运气,当我双击sub_1中的记录时,sub_2没有变化。我看过相关的问题,我认为这应该有效......

有什么建议么?也许我应该使用其他方法来做到这一点?

PS:我确定Me.Parent.sub_2.Filter是改变了,但重新查询不起作用。

编辑:

感谢您的回答。我发现了问题,就是'id'字段在查询中,但是子窗体上没有显示,所以可能Access不能使用。

当过滤器改变时,Access 会自动重新查询。

4

3 回答 3

5

您不需要对 filter 属性做任何事情。

在第一个子窗体上,设置 Link Master Fields 和 Link Child Fields 属性,就像在窗体上设置常规的单个子窗体控件一样。

对于第二个子窗体,也像设置常规的单个子窗体控件一样设置 Link Child Fields 属性。Link Master Fields 属性将引用第一个子窗体的控件名称:[Subform 1 Control Name]!FieldName。

在第一个子窗体控件的 OnCurrent 事件中,添加以下 VBA 代码行:

Me.Parent.Controls![Subform 2 Control Name].Requery

运行表格。当您单击第一个子窗体中的一行时,第二个子窗体将重新查询以显示在第一个子窗体中选择的行的子行。

于 2011-05-16T13:53:04.927 回答
2

分配 Filter 表达式后,将 FilterOn 属性设置为 True。

Me.Parent.sub_2.Form.Filter = "id=" & "'" & Me.Recordset!id & "'"
Me.Parent.sub_2.Form.FilterOn = True
于 2011-05-16T13:34:37.150 回答
0

您将需要以下内容:

Me!Subform2.Form.Requery  
'or  
Forms!Mainform!Subform1.Form!Subform2.Form.Requery

我没有时间对此进行测试,因此我无法确定 Subform1 和 Subform2 应该是实际子窗体的名称还是仅仅是 Subform 控件/容器的名称。我认为是后者。

这是此类问题的绝佳来源:
http ://access.mvps.org/access/forms/frm0031.htm

我对该页面的唯一抱怨是它们不包括调用方法、子/函数或引用公共变量。所有这些都(或可能)与那里列出的场景略有不同。

于 2011-05-16T12:41:20.003 回答