【机房收费系统】—— 组合查询

 

【前言】

第一次听说组合查询还是在龙哥、伟强的分享会上,才知道有这么个东西的。后来看网上的博客,感觉好难啊,逻辑什么的,完全没有,还记得那天下午我闷头看了好几个小时的博客,也没搞明白组合查询是个什么,后来硬着头皮写需求,硬敲;再后来看学生信息管理系统的代码,发现学生中的查询窗体,checkbox就用到了组合查询,觉得真是 so easy 啊!但当时根本没印象,看不懂代码自然也不会疑惑为什么会有相连的两个txtSQL,只是盲目的照着书本敲。现在进行到机房的组合查询,感觉自己对组合查询明白了甚多,接下来小编带大家了解机房收费系统中——组合查询那些事儿!

 

【正文】

 

首先

首先要明白这个窗体是怎么进行查询的,要明白客户的需求是什么,没有客户自己就是客户。其实它就是一个查询窗体,选择不同的查询条件,查询出符合条件的结果。机房收费系统中设计到组合查询的有三个窗体:【学生信息基本维护】、【操作员工作记录】 以及学生上下机状态管理中的【查询部分学生上机状态】,页面是这样的 【机房收费系统】—— 组合查询

 

其次

其次要理清这些个下拉框、文本框之间的逻辑关系,之间查询的先后关系是什么,下面分享一下:

我的需求分析:

  • 选择字段名、操作符、要查询的内容、组合关系,点击查询按钮:
  •  
  • 若第一行条件为空:则提示请把第一行数据补充完整,第二三行条件及第二个关系不可用;
  • 若第一行条件不为空:若第一个关系为空,则查询第一行条件中数据;若第一个关系不为空,则判断第二行条件是否为空:
  •  
  • 若第二行条件为空,则提示请把第二行数据补充完整,第三行条件不可用;
  • 若第二行条件不为空:若第二个关系为空,则查询第一二行条件中数据;若第二个关系不为空,则判断第三行条件是否为空;
  •  
  • 若第三行条件为空,则提示请把第三行数据补充完整;
  • 若第三行条件不为空:则查询第一二三行条件中数据。

流程图:

以【学生信息基本维护】为例:

 

【机房收费系统】—— 组合查询

 

最后

最后才是编写代码,前期的思路一定要理清,这是写代码的基础,有了逻辑,代码的编写也是so easy啦!下面以【查询部分学生上机状态】窗体进行代码分享:

 

组合查询基本代码:

txtSQL = "select * from 表名称 where"  
txtSQL = txtSQL & " " & fieldname(条件) & " " & fieldname(操作符) & "'" & 要查询的内容 & "'"  

查询按钮Click事件:

'判断第一行条件是否为空
If Trim(col1.Text) = "" Or fuhao1.Text = "" Or txt1.Text = "" Then
    MsgBox "请把第一行数据补充完整!"
    '第二、三行文本框不可用,第二个关系不可用
    col2.Enabled = False
    col3.Enabled = False
    fuhao2.Enabled = False
    fuhao3.Enabled = False
    txt2.Enabled = False
    txt3.Enabled = False
    Relation2.Enabled = False
Else
    txtSQL = "select * from Line_Info where " & filedname(col1.Text) & fuhao1.Text & "'" & txt1.Text & "'"
    '判断第一个关系是否为空
    If Relation1.Text = "" Then
        '查询满足第一行文本框的数据
        Set mrc = ExecuteSQL(txtSQL, MsgText)
        Call viewdata
        MsgBox "数据查询成功!"
    Else
        '判断第二行条件是否为空
        If Trim(col2.Text) = "" Or fuhao2.Text = "" Or txt2.Text = "" Then
            MsgBox "请把第二行数据补充完整!"
            '第三行文本框不可用
            col3.Enabled = False
            fuhao3.Enabled = False
            txt3.Enabled = False
        Else
            '判断第二个关系是否为空,
            If Relation2.Text = "" Then
                txtSQL = txtSQL & filedname(Relation1.Text) & filedname(col2.Text) & fuhao2.Text & " '" & txt2.Text & "'"
                Set mrc = ExecuteSQL(txtSQL, MsgText)
                Call viewdata
                MsgBox "数据查询成功!"
            Else
                '判断第三行条件是否为空
                If Trim(col3.Text) = "" Or fuhao3.Text = "" Or txt3.Text = "" Then
                    MsgBox "请把第三行数据补充完整"
                Else
                    txtSQL = txtSQL & filedname(Relation2.Text) & filedname(col3.Text) & fuhao3.Text & "'" & txt3.Text & "'"
                    Set mrc = ExecuteSQL(txtSQL, MsgText)
                    Call viewdata
                    MsgBox "数据查询成功!"
                End If
            End If
       End If
    End If
End If
End Sub

filedname过程:

Public Function filedname(a As String) As String
    Select Case a
        Case "卡号"
            filedname = "CardNo"
        Case "学号"
            filedname = "StudentNo"
        Case "上机日期"
            filedname = "OnDate"
        Case "上机时间"
            filedname = "OnTime"
        Case "下机日期"
            filedname = "OffDate"
        Case "下机时间"
            filedname = "OffTime"
        Case "消费金额"
            filedname = "ConsumeCash"
        Case "余额"
            filedname = "Cash"
        Case "与"
            filedname = " And "
        Case "或"
            filedname = " Or "
    End Select 
End Function

 

【结束语】

有些事经历了,才会懂。有些痛,受过了,才会坚强……哈哈画风突变~有些东西,千万不要被它的表面所唬住,相信自己,你可以的,组合查询,就是这么简单!