从另一个子表单重新查询子表单,问题

时间:2011-05-16 09:13:12

标签: ms-access vba access-vba subform

我在主窗体上有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会自动执行重新查询。

3 个答案:

答案 0 :(得分:4)

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

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

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

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

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

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

您将需要以下内容:

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

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

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

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