根据各种复选框的值自定义访问查询

时间:2014-10-23 19:11:24

标签: sql ms-access

我是新访问者,我需要根据一组复选框有选择地查询数据库。例如,如果选中了一个名为basketball的复选框,我将要查找其名称字段中包含该记录的所有记录。如果检查篮球和棒球,我会想要找到篮球和棒球的记录。我们目前的做法是丑陋和低效,我认为这是一个相当普遍的问题,因此必须有更好的解决方法。我在网上看过类似的东西,但这些只涉及一个复选框(不是我们表格中的10个左右),而且它们根本不是很有帮助。

由于

2 个答案:

答案 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)

由于没有提供参考信息,我在本例中使用以下内容;

  • Formname = Form1
  • Tablename = test
  • Checkfieldname = BaseballCheck

在表单属性表中,为BaseBallCheck添加以下vba,这将在启用/禁用检查后重新查询表单。

Private Sub BaseballCheck_AfterUpdate()
    Me.Requery
End Sub

然后在Recordsource表格中添加以下内容

SELECT test.Baseball
FROM test
WHERE (((test.Baseball)=[forms]![Form1]![BaseballCheck]));

现在,当表单刷新时,只会显示Baseball =选中或取消选中的值。