1

注意:我正在使用一个大型复杂数据库,所以为了清楚起见,我简化了下面的设置。

我对如何命名这个问题有点挣扎,因为它是一个有点复杂的问题。我希望它足够准确......

先说一点背景:

我有一个 Access 2010 数据库,其中包含一个名为“产品”的表和一个名为“数据集”的表之间的一对多关系(即我有一堆产品,每个产品都有多个数据集)。每个都有一个自动编号键字段(分别为 p_ID 和 d_ID)以及许多其他字段。

我有一个表单(我们称之为 frm_Main),它有两个子表单:sub_Products(基于“Products”表)和 sub_Datasets(基于“Datasets”表)。在主窗体上,我有一个控件 ctrl_SelectedProduct ,它链接到 [sub_Products]![p_ID] 以查看 sub_Products 中的哪条记录被选中/具有焦点,并且 sub_Datasets 子窗体链接到此控件,因此它只显示 Datasets 记录属于选定的产品记录。

在主窗体上,我还有一些控件用于过滤子窗体中的数据。例如,我有一个控件 ctrl_Category。我对这个控件进行了编码,因此当用户更改控件的值时,将应用一个过滤器,将 sub_Products 中的记录限制为仅 p_Category 值等于 ctrl_Category 中选择的值的那些记录。如果控件为空白,它将显示所有记录。如果基于 Products 表中的字段进行过滤,所有这些都非常有用。

现在的问题:

我的问题是我还希望能够根据数据集表中的字段进行过滤。例如,Datasets 有一个名为 d_Status 的字段。我希望用户能够在控件(ctrl_Status)中选择状态,并基于此:

1) sub_Products 将被过滤以仅显示那些具有关联数据集记录(或记录)的产品记录,其 d_Status 等于在 ctrl_Status 中选择的任何内容

然后

2)当在此过滤的 sub_Products 中选择 Products 记录时,sub_Datasets 将仅显示 d_Status 等于 ctrl_Status 中选择的任何内容的 Datasets 记录

我知道如何做第 2 部分。但我不知道如何让 part1 工作。由于 sub_Products 当前基于 Products 表,该表没有 d_Status 字段,因此我无法根据该字段对其进行过滤。因此,我假设我的第一步是更改我的设置,以便 sub_Products 基于组合两个表的查询(或至少添加 d_Status 字段)。

但是,如果我这样做,我会得到重复的产品记录。我不能使用查询的唯一值属性,因为如果我的产品有两个数据集,一个状态为“当前”,一个状态为“存档”,那么这些不被视为重复,并且产品信息在那里两次。如果我没有显示状态字段,它最初只显示独特的产品,但随后我不能基于该未显示的字段应用过滤器。

我还尝试将 sub_Products 基于 Totals 查询以利用 Group By 功能,但我仍然无法使其正常工作。即使我可以,我也不认为这是最好的解决方案,因为 Group By 只能有 10 个字段,而我的 Products 表有超过 10 个字段需要在 sub_Products 中显示。

我觉得我现在只是在兜圈子,不知道从这里尝试什么。请帮忙!

4

1 回答 1

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
于 2012-10-10T19:39:53.033 回答