首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选择复选框指示字段值的访问项

选择复选框指示字段值的访问项
EN

Stack Overflow用户
提问于 2018-06-19 00:18:44
回答 1查看 1.4K关注 0票数 0

在我的数据库中,我有一个有几个yes/no列的表。

现在,我有一个未绑定表单,其中包含一些未绑定复选框,还有一个列表框,它绑定到一个特殊的查询中。

我希望使用表单上的复选框筛选列表框,并在列表中显示具有匹配值的项。

例如,

  • 如果我检查表单上的box1,列表框中包含field1的任何项都应该显示。
  • 如果我检查表单上的box2和box3,任何包含field2和field3的项目都应该显示在列表框中。如果一个项目没有field3和field3,则它们的条目不应该显示在列表中,因为没有选中这些框。

窗体上的每个控件都使用单击事件过程使列表请求。

现在,这不适合我。只有当所有值匹配复选框时,我的列表框才会显示项。因此,如果我检查box1和box2,我只能从只有field1和field2的项中获得结果。如果这个项目也有field3,它就不会显示-这是我的问题。

到目前为止,我的查询是这样的:

代码语言:javascript
复制
SELECT MyQuery.title, field1, MyQuery.field2, MyQuery.field3
FROM MyQuery
WHERE (
(
(MyQuery.field1) like [Forms]![Ability Finder]![box1]
)AND(
(MyQuery.field2) like [Forms]![Ability Finder]![box2]
)AND(
(MyQuery.field2) like [Forms]![Ability Finder]![box3]
)

);

也许我走错路了。此外,我有大约20个复选框,我需要这样做。

代码语言:javascript
复制
SELECT MyQuery.cat, MyQuery.nickname, MyQuery.title, MyQuery.level, MyQuery.field1, MyQuery.field2, MyQuery.field3
FROM MyQuery
WHERE (
((MyQuery.field1)=[Forms]![Ability Finder]![box1] Or [Forms]![Ability Finder]![box1] Is Null) 
AND ((MyQuery.field2)=[Forms]![Ability Finder]![box2] Or [Forms]![Ability Finder]![box2] Is Null) 
AND ((MyQuery.field3)=[Forms]![Ability Finder]![box3] Or [Forms]![Ability Finder]![box3] Is Null)
);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-19 16:36:58

不确定您是否想在VBA中编写事件处理,但这将使这项任务更加容易。每次单击复选框时,您都可以动态构造SQL查询,如果只通过调整For循环将其添加到行中,则它可以处理任何附加复选框。为每个复选框的Click事件调用Sql构造函数,然后在构造函数中设置列表框的行源。

代码语言:javascript
复制
Private Sub Check1_Click()

ConstructSqlQuery

End Sub

Private Sub Check2_Click()

ConstructSqlQuery

End Sub

Private Sub Check3_Click()

ConstructSqlQuery

End Sub

...

Private Sub ConstructSqlQuery()

Dim sql As String
Dim numChecked As Integer
Dim checkboxName As String
Dim criteriaBoxName As String

numChecked = 0

'the 1=1 is a dummy value that always returns true. It makes it easier to append additional "and" clauses.
sql = "select field1, field2, field3, ... from MyQuery where 1=1"

For x = 1 To 15
    checkboxName = "Check" & x
    criteriaBoxName = "Text" & x
    If Me.Controls(checkboxName).Value = -1 Then
        sql = sql & " and field" & x & " like '*" & Me.Controls(criteriaBoxName).Value & "*'"
        numChecked = numChecked + 1
    End If
Next

If numChecked = 0 Then
    'if nothing is checked, don't show anything.
    Me.List0.RowSource = ""
Else
    Me.List0.RowSource = sql
End If

Me.List0.Requery

End Sub
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50919043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档