2011-05-16 104 views
4

我在主窗体上有2个子窗体。 Sub_2在列表中显示在sub_1中选择的项目的详细信息。对于这两个子表单,我使用连续表单,并且它们被限制为2个查询,并且有一个共同的字段,如'id'。Requery子窗体从另一个子窗体,问题

我所做的是对sub_1在D单击事件添加代码来设置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

您不需要对filter属性进行任何操作。

在第一个子窗体上,设置“链接主字段”和“链接子字段”属性,就像您在窗体上使用常规的单个子窗体控件一样。

对于第二个子窗体,还可以像为常规的单个子窗体控件一样设置Link Child Fields属性。链接主字段属性将引用第一个子窗体的控件名称:[Subform 1 Control Name]!FieldName。

在第一子控件的成为当前事件,添加的VBA下面一行代码:

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

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

+0

这是个好主意。有用。 – darkjh 2011-05-17 06:39:44

+0

我发现上面的解决方案无法进行一些修改 - 它需要是“Me.Parent.Controls!SubformName.Form.Requery”(即插入一个Form.') – 2015-12-11 22:51:09

0

你会需要像下面这样:

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

我没有时间来测试这个,所以我不能告诉你肯定如果Subform1和Subform2应的名称实际子窗体或仅子窗体控件/容器。我认为这是后者。

下面是这类问题的极好来源:
http://access.mvps.org/access/forms/frm0031.htm

我与网页唯一的抱怨是,他们不包括调用方法,潜艇/功能,或指公共变量。所有这些都(或可能)与这里列出的情景略有不同。

2

在分配过滤器表达式后,将FilterOn属性设置为True。

Me.Parent.sub_2.Form.Filter = "id=" & "'" & Me.Recordset!id & "'" 
Me.Parent.sub_2.Form.FilterOn = True 
相关问题