Access 2010:根据特定组合框条件过滤字段中包含多个值的报表

Posted

技术标签:

【中文标题】Access 2010:根据特定组合框条件过滤字段中包含多个值的报表【英文标题】:Access 2010: Filter a Report with multiple values in field based on specific combo box criteria 【发布时间】:2014-06-17 14:56:13 【问题描述】:

我对 Access 还很陌生,所以如果这是非常基本的东西,我深表歉意。我有一个包含不同公司及其产品信息的表的数据库。用户可以基于下拉复选框列表在“产品”字段中输入多个产品。例如,我可以在“公司名称”字段中有一家公司的名称,然后在“产品”字段中最多可以有四种产品“玩具、家用电器、家具、清洁用品”。

我创建了一份报告来按产品生成公司列表。用户打开一个表单,他们可以在其中从下拉列表中选择一个产品,然后点击 go。理想情况下,生成的报告包含生产该产品的所有供应商。但是,我的问题是,如果一家公司生产多种产品,则过滤器不包括该公司,因为它与指定的标准不完全匹配。

基本上,我正在寻找某种方法来告诉报告过滤所有公司,如果它包含特定产品,而不仅仅是等于该产品。我不知道该怎么做。我希望这是有道理的,任何帮助将不胜感激!

【问题讨论】:

【参考方案1】:

您需要有两张桌子(实际上可能是三张;我会选择三张)。

公司表 公司信息:姓名、地址、电话号码等,加上一个 ID 字段,该字段将为整数、Auto(由 Access 自动分配),并将作为主键。

产品类型表 如果您的产品类型(玩具等)列出。将包含根据 Customer 表中的 ID 定义的 ID。

客户产品表 这也将具有与其他两个相同的 ID。它还将有两个 int 字段:CustomerID 和 ProductTypeID。这些将包含 Customer 和 ProductType 表中 ID 列的值。这些将被定义为外键:访问将不允许您放置例如10 在 ProductTypeID 中,除非 ProductType 具有 ID 为 10 的行。这称为参照完整性,有助于确保您的数据是一致的。

您还可以在 CustomerID 和 ProductID 上创建唯一索引(两个字段上的一个索引)。这将确保您不会在数据库中两次获得相同的 ProductType/Customer 组合。

查询 您现在可以将 ProductType 中的行用于包含产品类型的下拉菜单。如果您需要添加一个,您只需在 ProductType 表中添加一行,代码就会选择它。 要获取携带 ProductType 的客户列表,您需要在 Customer 和 CustomerProduct 之间进行连接。比如:

select *
from Customer c
inner join CustomerProduct p on p.CustomerID = c.ID
where p.ProductTypeID = 10

(假设他们要查找的产品类型的 ID 为 10)。

这实际上是正确的方法。您的方式 - 在一个客户行上有多个 ProductTypes - 使事情变得有点棘手。有一种方法可以解决您当前的问题,但我不会去那里,因为这种类型的设计虽然不是一个不寻常的初学者错误,但会在以后导致可怕的问题。从一开始就正确地做。

【讨论】:

非常感谢!那效果很好。我想这一定是某种设计问题。再次感谢!

以上是关于Access 2010:根据特定组合框条件过滤字段中包含多个值的报表的主要内容,如果未能解决你的问题,请参考以下文章

Access 中的组合过滤无法正常工作

在多个字段的 Access 筛选中打开报表

如何在 Access VBA 中使用 like

MS Access 2010 - 如何根据以前的输入以编程方式显示表单字段?

根据组合框选择切换表单上其他字段的可见性 - MS Access

访问 2010 组合框 - 更新后无法 DLookup 结果