【机房收费系统】-查询
前言:
刚开始做的时候总会自己吓自己,组合查询这个之前学生的时候师父就告诉说是很重要,这次在做之前就有了充分的心理准备,其实开始动手之后远远没有自己想象中的那么难,提起机房总免不了提起一个词-逻辑,理清逻辑有多重要,大家也都进行了,想必是深有体会啊,接下来就总结和梳理下自己捣鼓这个时候的思路;
内容:
在这里就以学生基本信息维护为例,总结下关于组合查询的内容,其余的两个也都是大同小异;
思考过程:
1、第一个查询条件可单独查询,组合关系combo3(0)符合的时候txtSQL1和txtSQL2同时查询,当组合框combo3(1)选中的时候txtSQL1、txtSQL2、txtSQL3三行条件一起查询。
2、当字段名是性别的时候操作符中的符号只能是“=”和“< >”并且提示只能输入“男” 或“女”。当字段名为时间或者是日期的时候,combo2(1)要有限制只能输入日期或者是时间,这个还需要在后续的优化中继续完善;
3、注意:组合查询combo3(0)为空的时候txtSQL2不能点击输入,只有单击combo3(0)的时候txtSQL2才能用;
代码展示:
查询代码展示:
Private Sub cmdInquire_Click()
Dim txtSQL As String
Dim MsgText As String
Dim mrc As ADODB.Recordset
'定义三个字符串,表示三种查询条件
Dim txtSQL1 As String '第一种查询条件
Dim txtSQL2 As String '第二种查询条件
Dim txtSQL3 As String '第三种查询条件
'在line_info表中获得整行记录,*表示查询的记录
txtSQL = "select * from student_info where"
txtSQL1 = txtSQL & " " & field(Combo1(0).Text) & " " & (Combo2(0).Text) & "'" & Trim(Text1.Text) & "'"
txtSQL2 = txtSQL1 & " " & field(Combo3(0).Text) & " " & field((Combo1(1).Text)) & " " & Combo2(1).Text & "'" & Trim(Text2.Text) & "'"
txtSQL3 = txtSQL2 & " " & field(Combo3(1).Text) & " " & field(Combo1(2).Text) & " " & Trim(Combo2(2).Text) & "'" & Trim(Text3.Text) & "'"
'第一行查询条件
If Trim(Combo1(0).Text) = "" Or Trim(Combo2(0).Text) = "" Or Trim(Text1.Text) = "" Then
MsgBox "请输入完整的查询条件!", vbOKOnly, "提示"
Exit Sub
Else
txtSQL = txtSQL1
Set mrc = ExecuteSQL(txtSQL, MsgText)
End If
'判断组合关系框是否填写,两行查询条件
If Combo3(0).Text <> "" Then
'判断第二行内容是否完整,且符合要求
If Combo1(1).Text = "" Or Combo2(1).Text = "" Or Text2.Text = "" Then
MsgBox "请将第二个查询条件内容填写完整!", vbOKOnly, "提示"
Exit Sub
Else
'将前两行条件联系起来完成SQL语句
txtSQL = txtSQL2
Set mrc = ExecuteSQL(txtSQL, MsgText)
End If
End If
'判断第二个组合关系是否选中,三行查询条件
If Combo3(1).Text <> "" Then
'如果选中,判断第二行内容是否填写完整,且符合要求
If Combo1(2).Text = "" Or Combo2(2).Text = "" Or Text3.Text = "" Then
MsgBox "请将第三行查询条件内容填写完整!", vbOKOnly, "提示"
Exit Sub
Else
'将三行的条件联系起来,完成SQL语句
txtSQL = txtSQL3
Set mrc = ExecuteSQL(txtSQL, MsgText)
End If
End If
If mrc.EOF Then
MsgBox "查询无信息,请重新选择查询条件!", vbOKOnly + vbInformation, "提示信息"
Exit Sub
End If
'获得表中数据表头
With MSHFlexGrid1
.ColAlignment(-1) = 4
.Rows = 1
.TextMatrix(0, 0) = "姓名"
.TextMatrix(0, 1) = "卡号"
.TextMatrix(0, 2) = "系别"
.TextMatrix(0, 3) = "年级"
.TextMatrix(0, 4) = "班级"
.TextMatrix(0, 5) = "性别"
.TextMatrix(0, 6) = "状态"
.TextMatrix(0, 7) = "备注"
.TextMatrix(0, 8) = "类型"
.TextMatrix(0, 9) = "日期"
.TextMatrix(0, 10) = "时间"
'循环执行,直到最后一个记录
Do While Not mrc.EOF
.Rows = .Rows + 1 '防止空白行出现
.CellAlignment = 4
.TextMatrix(.Rows - 1, 0) = Trim(mrc.Fields(2))
.TextMatrix(.Rows - 1, 1) = Trim(mrc.Fields(0))
.TextMatrix(.Rows - 1, 2) = Trim(mrc.Fields(4))
.TextMatrix(.Rows - 1, 3) = Trim(mrc.Fields(5))
.TextMatrix(.Rows - 1, 4) = Trim(mrc.Fields(6))
.TextMatrix(.Rows - 1, 5) = Trim(mrc.Fields(3))
.TextMatrix(.Rows - 1, 6) = Trim(mrc.Fields(10))
.TextMatrix(.Rows - 1, 7) = Trim(mrc.Fields(8))
.TextMatrix(.Rows - 1, 8) = Trim(mrc.Fields(14))
.TextMatrix(.Rows - 1, 9) = Trim(mrc.Fields(12))
.TextMatrix(.Rows - 1, 10) = Trim(mrc.Fields(13))
mrc.MoveNext
Loop
MsgBox "条件查询结束", vbOKOnly + vbExclamation, "提示!"
mrc.Close
End With
End Sub
注意:
1、字段名与数据库中的列名相对应,将字段名转化为数据库语言,查询识别;
2、借助模块和循环语句,减少代码量;
3、代码输入过程还是要仔细,单引号双引号少一个都会出现不一样的问题;
单引号是sql查询语句中表示一个字符串的开始结束的符号;双引号是VB语言字符串表示字符串开始结束的符号;
小结:
做的时候还是要走心,理清思路,一步步完善;
上一篇: 小提问:解答者
下一篇: Spring Boot配置文件详解