我仍然是Access的新手,所以如果这是非常基本的东西,我道歉。我有一个包含表格的数据库,其中包含不同公司及其产品的信息。用户可以在"产品"中输入多个产品。字段基于下拉列表,复选框列表。例如,我可以在"公司名称"中找到公司的名称。领域,然后它可以生产多达四种产品"玩具,家用电器,家具,清洁用品"在"产品"字段。
我创建了一份报告,按产品生成公司列表。用户打开一个表单,他们可以在下拉列表中选择其中一个产品,然后点击go。理想情况下,生成的报告包含生产该产品的所有供应商。但是,我的问题是,如果一家公司生产多种产品,那么过滤器就不包括该公司,因为它并不完全符合指定的标准。
基本上我正在寻找某种方式告诉报告过滤所有公司,如果它包含特定产品,而不仅仅是等于该产品。我不知道该怎么做。我希望这是有道理的,任何帮助将不胜感激!
答案 0 :(得分:0)
你需要有两张桌子(可能实际上有三张桌子;我会带三张桌子。)
公司表 公司信息:姓名,地址,电话号码等,加上一个ID字段,它将是整数,自动(由Access自动分配)并将成为主键。
ProductType表 列表,如果您的产品类型(玩具等)。将包含根据Customer表中的ID定义的ID。
CustomerProduct表 这也将具有其他两个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)。
这实际上是正确的方法。你的方式 - 在一个客户行上有多个ProductType - 让事情变得有点棘手。有一种解决你眼前问题的方法,但是我没有去那里,因为这种类型的设计虽然不是一个不寻常的初学者错误,但后来会导致可怕的问题。从一开始就正确地做到了。