我是新访问者,我需要根据一组复选框有选择地查询数据库。例如,如果选中了一个名为basketball的复选框,我将要查找其名称字段中包含该记录的所有记录。如果检查篮球和棒球,我会想要找到篮球和棒球的记录。我们目前的做法是丑陋和低效,我认为这是一个相当普遍的问题,因此必须有更好的解决方法。我在网上看过类似的东西,但这些只涉及一个复选框(不是我们表格中的10个左右),而且它们根本不是很有帮助。
由于
答案 0 :(得分:1)
我在这里做一些假设。我假设你有4项运动;棒球,篮球,足球和曲棍球。如果您愿意,可以添加更多。
我假设您有4个复选框; BaseballCheck,BasketballCheck,FootballCheck和HockeyCheck。
我假设您有一个名为MyTable的表,其中包含一个名为Sport的字段。
您可以在表单中添加一个按钮。叫它btnSubmit。将此VBA添加到您的按钮:
Dim db as Database
Dim rec as Recordset
Dim MySQL as String
Set db = CurrentDB
MySQL = "SELECT * FROM MyTable WHERE 1 = 1"
If BaseballCheck = True then
MySQL = MySQL & " AND Sport = 'Baseball'"
EndIf
If HockeyCheck = True then
MySQL = MySQL & " AND Sport = 'Hockey'"
EndIf
If BasketballCheck = True then
MySQL = MySQL & " AND Sport = 'Basketball'"
EndIf
Etc...
Set rec = db.OpenRecordset(MySQL)
您可以使用CreateQuerydef创建永久查询,然后将其用作报告的基础,而不是最后一个语句。但是,您必须在开头添加一些代码来删除该querydef(如果存在),否则会引发错误。
如果你想要一些更优雅的东西(以及一个允许更容易扩展的东西)你可以总是遍历表单上的所有复选框并将体育转储到数组中,然后使用该数组作为主题"体育运动(......)"言。
答案 1 :(得分:0)
由于没有提供参考信息,我在本例中使用以下内容;
在表单属性表中,为BaseBallCheck添加以下vba,这将在启用/禁用检查后重新查询表单。
Private Sub BaseballCheck_AfterUpdate()
Me.Requery
End Sub
然后在Recordsource表格中添加以下内容
SELECT test.Baseball
FROM test
WHERE (((test.Baseball)=[forms]![Form1]![BaseballCheck]));
现在,当表单刷新时,只会显示Baseball =选中或取消选中的值。