我目前正在为学校作业制作(假)DVD租赁业务的数据库。
我创建了一个链接流派和DVD信息的表,以及在一个字段中分离两个类型的任何实例。这看起来像下图:
我创建了一个包含DVD名称(由genre_ID链接)和相关类型的查询,如下所示:
我现在已将查询移动到一个表单中,如下所示:
顶部的组合框用于搜索流派,但我无法弄清楚如何实现(最好使用VBA),因此它将过滤任何搜索的流派并显示所有匹配它们的电影(无论如何)他们在哪个领域。)
我不认为老师会太在意数据库无法处理3种类型的电影,所以我不需要改变它。
答案 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:没有测试过代码,但你得到了逻辑。