过滤表单内的查询

时间:2016-09-19 22:09:22

标签: vba ms-access

我目前正在为学校作业制作(假)DVD租赁业务的数据库。

我创建了一个链接流派和DVD信息的表,以及在一个字段中分离两个类型的任何实例。这看起来像下图:enter image description here

我创建了一个包含DVD名称(由genre_ID链接)和相关类型的查询,如下所示:

enter image description here

我现在已将查询移动到一个表单中,如下所示:

enter image description here

顶部的组合框用于搜索流派,但我无法弄清楚如何实现(最好使用VBA),因此它将过滤任何搜索的流派并显示所有匹配它们的电影(无论如何)他们在哪个领域。)

我不认为老师会太在意数据库无法处理3种类型的电影,所以我不需要改变它。

2 个答案:

答案 0 :(得分:1)

这只是由于数据库设计不好而出现的第一个问题。这是典型的多对多关系,最好使用3个表而不是一个。

但是如果您仍然需要按多个字段进行过滤,只需在组合框的AfterUpdate事件中更改RecorSource属性,WHERE子句应包含OR运算符连接条件的所有字段:

"WHERE genre1 = '" & Me.cboSearch & "' OR genre2 = '" & Me.cboSearch & "' OR  genre3 = '" & Me.cboSearch & "'"

您可以使用相同的方式更改Filter属性而不是RecordSource

答案 1 :(得分:1)

您应该有这样的配置,允许您为每部电影添加> = 0种类。

+---------------+-------------+-------------------------------------+
|   DVD table   | Genre Table |         DVD_VS_GENRE_TABLE          |
+---------------+-------------+-------------------------------------+
| dvd_id        | genre_id    | DVD_ID(foreignkey to dvd table)     |
| Name          | genre       | GENRE_ID(foreignkey to genre table) |
| other columns |             |                                     |
+---------------+-------------+-------------------------------------+

然后是你要过滤的SQL代码的问题

mSQL=Select tbl_dvd.name, tbl_genre.genre
from (tbl_dvd left join tbl_dvd_vs_genre on tbl_dvd.dvd_id = tbl_dvd_vs_genre.dvd_id) left join tbl_genre on tbl_dvd_vs_genre.genre_id = tbl_genre.genre_id
WHERE (genre like "*" & yourcombo.value & "*")

me.yoursubform.form.recordset := msql

并且您可以将此代码分配给您的on change事件,该事件将在输入时进行过滤..

ps:没有测试过代码,但你得到了逻辑。