ACCESS窗体多条件查询/组合查询的方法

3,363次阅读
没有评论

共计 2447 个字符,预计需要花费 7 分钟才能阅读完成。

提醒:本文最后更新于 2019-05-12 19:52,文中所关联的信息可能已发生改变,请知悉!

根居网上刘小军的示例和说明文档,结合自己的 ACCESS 数据库做了个窗体多条件查询。

1、建立主窗体

①建立需要查询的窗体,把需要查询的字段建立起来,把窗体面积放大到足以容纳条件输入字段和子窗体,并调整所有控件的字体;

ACCESS 窗体多条件查询 / 组合查询的方法

②把窗体的“记录源”和各控件的“数据来源”都删除(很多初学者很容易犯的错误就是这里),把风格和制单改为组合框(因为这些字段的可能值比较少,直接选择就好,不必让用户输入)

③重新调整各字段的位置,

④重量后面的两个文本框改名为“大于重量”和“小于重量”,日期后面的两个文本框改名为“大于时间”和“小于时间”;

⑤画一个矩形框包住所有查询条件,把矩形框背景设置为常规,背景色为深灰色,特殊样式为凹陷,此时矩形框覆盖了其它控件,要用菜单中“格式”→“置于底层”才能让它们显示出来;

⑥在窗体上用向导建立一个按钮,按钮标题是“查询”和“全清”,先不管里面的代码,后面再修改;

⑦窗体属性中“记录选定器”=否,“浏览按钮”=否。

2、建立子窗体

①在主窗体中用工具箱中的“子窗体 / 子报表”对象建立一个子窗体;

②以存书查询为记录源,选择所有字段;

③把子窗体命名为“工艺单查询子窗体”;

④在主窗体上删除子窗体的标签,并重新调整子窗体的大小;

⑤关闭主窗体的设计视图,单独打开子窗体数据表视图,调整字体和行的大小。

现在,得到了如下的窗体:

ACCESS 窗体多条件查询 / 组合查询的方法

3、查询方法:用 VBA 生成窗体筛选条件

3.1 查询按钮

本按钮代码的设计思想是根据主窗体上各个条件输入控件的值,用 VBA 代码生成一个条件组合的字符串作为子窗体的窗体筛选的条件。代码如下:

Private Sub 查询_Click()
  Dim strWhere As String
  strWhere =“”‘判断【品号】条件是否有输入的值
  If Not IsNull(Me.[ 品号]) Then‘有输入
    strWhere = strWhere &“([品号] like‘*”& Me. 品号 &“*’) and“End If‘判断【品名】条件是否有输入的值
  If Not IsNull(Me.[ 品名]) Then‘有输入
    strWhere = strWhere &“([品名] like‘*”& Me. 品名 &“*’) and“End If‘判断【成分】条件是否有输入的值
  If Not IsNull(Me.[ 成分]) Then‘有输入
    strWhere = strWhere &“([成分] like‘*”& Me. 成分 &“*’) and“End If‘判断【风格】条件是否有输入的值
  If Not IsNull(Me.[ 风格]) Then‘有输入
    strWhere = strWhere &“([风格] like‘”& Me. 风格 &“‘) and“End If‘判断【制单】条件是否有输入的值
  If Not IsNull(Me.[ 制单]) Then‘有输入
    strWhere = strWhere &“([制单] like‘”& Me. 制单 &“‘) and“End If‘判断【大于重量】条件是否有输入的值
  If Not IsNull(Me.[ 大于重量]) Then‘有输入
    strWhere = strWhere &“([重量] >=“& Me. 大于重量 &“) and“End If‘判断【小于重量】条件是否有输入的值
  If Not IsNull(Me.[ 小于重量]) Then‘有输入
    strWhere = strWhere &“([重量] <=“& Me. 小于重量 &“) and“End If‘判断【大于时间】条件是否有输入的值
  If Not IsNull(Me.[ 大于时间]) Then‘有输入
        strWhere = strWhere &“([日期] >= #”& Format(Me. 大于时间,“yyyy-mm-dd”) &“#) AND“End If‘判断【小于时间】条件是否有输入的值
    If Not IsNull(Me.[ 小于时间]) Then‘有输入
        strWhere = strWhere &“([日期] <= #”& Format(Me. 小于时间,“yyyy-mm-dd”) &“#) AND“End If‘如果输入了条件,那么 strWhere 的最后肯定有”AND“,这是我们不需要的,‘要用 LEFT 函数截掉这 5 个字符。If Len(strWhere) > 0 Then‘有输入条件
        strWhere = Left(strWhere, Len(strWhere) – 5)
    End If‘让子窗体应用窗体查询
    Me. 工艺单查询子窗体.Form.Filter = strWhere
    Me. 工艺单查询子窗体.Form.FilterOn = True
End Sub

3.2 清除按钮

代码里都有说明,只讲以下的一段代码:

Private Sub Command69_Click()‘Screen.PreviousControl.SetFocus‘DoCmd.DoMenuItem acFormBar, acEditMenu, 10, , acMenuVer70
On Error GoTo Err_cmdCommand69_Click‘这里将使用 FOR EACH CONTROL 的方法来清除控件的值‘这在控件比较多的时候非常有用。‘================================
   Dim ctl As Control
    For Each ctl In Me.Controls‘根据 ctl 的控件类型来选择
        Select Case ctl.ControlType
            Case acTextBox‘是文本框,要清空 (注意,子窗体下面还有两个锁定的文本框不能赋值)
                ctl.Value = Null
            Case acComboBox‘是组合框,也要清空
                ctl.Value = Null‘其它类型的控件不处理
        End Select
    Next‘取消子窗体的筛选
    Me.[工艺单查询子窗体].Form.Filter =“”Me.[工艺单查询子窗体].Form.FilterOn = False
Exit_cmdCommand69_Click:
    Exit Sub
Err_cmdCommand69_Click:
    MsgBox Err.Description
    Resume Exit_cmdCommand69_Click
End Sub

就这样可以进行多条件查询了。

正文完
 0
水东柳
版权声明:本站原创文章,由 水东柳 2018-12-14发表,共计2447字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)