注意:我正在使用大型复杂数据库,所以为了清楚起见,我简化了下面的设置。
我对如何标题这个问题感到挣扎,因为这是一个复杂的问题。我希望它足够准确......
有点背景知识:
我有一个Access 2010数据库,其中包含一个名为“Products”的表和一个名为“Datasets”的表之间的一对多关系(即我有一堆产品,每个产品都有多个数据集)。每个都有一个自动编号关键字段(分别是p_ID和d_ID)以及许多其他字段。
我有一个表单(让我们称之为frm_Main),它有两个子表单:sub_Products(基于“Products”表)和sub_Datasets(基于“Datasets”表)。在主窗体上我有一个控件ctrl_SelectedProduct链接到[sub_Products]![p_ID]以查看sub_Products中的哪条记录被选中/具有焦点,而sub_Datasets子窗体链接到该控件,以便它只显示数据集记录属于所选产品记录。
在主窗体上,我还有一些控件,用于过滤子窗体中的数据。例如,我有一个控件ctrl_Category。我对此控件进行了编码,以便在用户更改控件的值时,应用过滤器将sub_Products中的记录限制为仅具有p_Category值等于ctrl_Category中选择的值的那些。如果控件为空,则显示所有记录。如果基于Products表中的字段进行过滤,这一切都很有效。
现在出现问题:
我的问题是我还希望能够根据“数据集”表中的字段进行过滤。例如,数据集有一个名为d_Status的字段。我希望用户能够在控件(ctrl_Status)中选择状态,并基于此:
1) sub_Products将被过滤以仅显示具有相关数据集记录(或记录)的产品记录,其中d_Status等于在ctrl_Status中选择的任何内容
然后
2)当在此过滤的sub_Products中选择Products记录时,sub_Datasets将仅显示d_Status等于ctrl_Status中所选内容的数据集记录
我知道如何做第二部分。但我不知道如何让part1工作。由于sub_Products目前基于Products表,该表没有d_Status字段,因此我无法根据该字段对其进行过滤。因此,我假设我的第一步是更改我的设置,以便sub_Products基于组合两个表的查询(或至少添加d_Status字段)。
但是,如果我这样做,我会得到重复的产品记录。我不能使用查询的唯一值属性,因为如果我有一个产品有两个数据集,一个状态为“当前”,另一个状态为“已存档”,那么那些不被视为重复,产品信息在那里两次。如果我没有显示状态字段,它最初只显示唯一的产品,但随后我无法根据该非显示字段应用过滤器。
我还尝试将sub_Products基于Totals查询,以便利用Group By功能,但我仍然无法使其正常工作。即使我不能认为这是最好的解决方案,因为你只能有10个分组依据的字段,而我的产品表有超过10个字段,我需要在sub_Products中显示。
我觉得我现在只是绕圈而行,我不知道从这里尝试什么。请帮忙!
答案 0 :(得分:0)
你能不能添加这样的东西?
Private Sub ctrl_Category_AfterUpdate()
Form_frm_Main.Recordsource = "Select * from Products where p_ID IN(" & _
"Select p_ID from Datasets where d_Status = " & _
Me!ctrl_Category.Value & ")"
End Sub
或者,您可以通过其他子窗体的父级访问子窗体。 这是一个非工作的片段,只是为了给你一个想法:
Me.Parent.otherChildFormName.Form.Recordsource = whatever