【机房收费系统】—— 组合查询
【前言】
第一次听说组合查询还是在龙哥、伟强的分享会上,才知道有这么个东西的。后来看网上的博客,感觉好难啊,逻辑什么的,完全没有,还记得那天下午我闷头看了好几个小时的博客,也没搞明白组合查询是个什么,后来硬着头皮写需求,硬敲;再后来看学生信息管理系统的代码,发现学生中的查询窗体,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
【结束语】
有些事经历了,才会懂。有些痛,受过了,才会坚强……哈哈画风突变~有些东西,千万不要被它的表面所唬住,相信自己,你可以的,组合查询,就是这么简单!