东流西上
故在柳溪,水东有柳

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

阿里云主机

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

1、建立主窗体

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

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

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

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

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

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

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

2、建立子窗体

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

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

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

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

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

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

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) 打赏
转载请注明出处:水东柳博客 » ACCESS窗体多条件查询/组合查询的方法
分享到: 更多 (0)

评论 抢沙发

7 + 2 =
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏