机房收费系统在磕磕绊绊中过来了,这期间遇到问题,解决问题,最后收获的特别多,在敲得过程中,不断的学习新知识,应该说组合查询是收费系统的一个小难点了吧,起初我是真的不知道该从哪里下手,总是有种剪不断理还乱的感觉,分析分析就绕进去了,我总是把问题想的很复杂,其实只要一句SQL语句,一切都解决了,根本用不到好多好多的IF,FOr 什么的,下面是我自己在实现此过程所需要的代码:以收费系统中基本信息维护为例子,其实其他的也都大同小异
只要一句正确的SQL,其他全OK!
刚着手时看到这个确实有点迷糊,该从何下手呢?理清楚了才明白,其实很简单,在这里我是用组合关系为点,进行判断,如果组合关系中什么都没有选择,那么就认为查询条件为第一行,而且必须选择完全,如果选择了组合关系,那么相对应的2或3行条件就需要填充完整,接着就是按照条件在数据库中查询内容了。而我的字段名选择是汉字,要想在数据库中查询字段,根本就不认识,这就需要我将汉字转换为相应的字符串,代码中的FieldName 就是我要利用到的一个函数
Private Sub cmdInquire_Click() Dim mrc As ADODB.Recordset Dim txtSQL As String Dim MsgText As String txtSQL = "select * from student_Info where " '判断字段的选择是否为空 If Not Testtxt(comboFiledName1.Text) Then MsgBox "请选择字段!", vbOKOnly + vbExclamation, "警告" comboFiledName1.SetFocus Exit Sub End If '判断操作符的选择是否为空 If Not Testtxt(comboOperate1.Text) Then MsgBox "请选择操作符!", vbOKOnly + vbExclamation, "警告" comboOperate1.SetFocus Exit Sub End If '判断要查询的内容是否为空 If Not Testtxt(txtContent1.Text) Then MsgBox "请在输入要查询的内容", vbOKOnly + vbExclamation, "警告" txtContent1.SetFocus Exit Sub End If txtSQL = txtSQL & FiledName(comboFiledName1.Text) & " " & comboOperate1.Text & "'" & txtContent1.Text & "'" '利用模版函数查看是否是组合查询第一行为空时,查询无效 '开始组合查询 If Trim(comboRelation1.Text <> "") Then If Trim(comboFiledName2.Text) = "" Or Trim(comboOperate2.Text) = "" Or Trim(txtContent2.Text) = "" Then MsgBox "您选择了组合关系,请输入数据之后再查询", vbOKOnly, "提示信息" Exit Sub Else txtSQL = txtSQL & FiledName(comboRelation1.Text) & " " & FiledName(comboFiledName2.Text) & comboOperate2.Text & "'" & Trim(txtContent2.Text) & "'" End If End If If Trim(comboRelation2.Text) <> "" Then If Trim(comboFiledName3.Text) = "" Or Trim(comboOperate3.Text) = "" Or Trim(txtContent3.Text) = "" Then MsgBox "您选择了第二个组合,请输入数据之后在查询", vbOKOnly, "提示" Exit Sub Else txtSQL = txtSQL & FiledName(comboRelation2.Text) & " " & FiledName(comboFiledName3.Text) & comboOperate3.Text & "'" & Trim(txtContent3.Text) & "'" End If End If '开始进行查找 Set mrc = ExecuteSQL(txtSQL, MsgText) If mrc.RecordCount = 0 Then MsgBox "没有您要查找的学生上机记录!", vbOKOnly + vbCritical, "查询提示" comboFiledName1.SetFocus MSHFlexGrid1.Rows = 1 '存在上机记录查询成功,填充到表格 Else MSHFlexGrid1.Rows = 1 Do While Not mrc.EOF With MSHFlexGrid1 .CellAlignment = 4 .Rows = .Rows + 1 .TextMatrix(.Rows - 1, 0) = mrc!studentNo .TextMatrix(.Rows - 1, 1) = mrc!studentName .TextMatrix(.Rows - 1, 2) = mrc!cardno .TextMatrix(.Rows - 1, 3) = mrc!cash .TextMatrix(.Rows - 1, 4) = mrc!department .TextMatrix(.Rows - 1, 5) = mrc!grade .TextMatrix(.Rows - 1, 6) = mrc!Class .TextMatrix(.Rows - 1, 7) = mrc!Sex .TextMatrix(.Rows - 1, 8) = mrc!Status .TextMatrix(.Rows - 1, 9) = mrc!explain End With mrc.MoveNext Loop End If Exit Sub End Sub
'将汉字转换为相应的字段名字 Public Function FiledName(StrFiledName As String) As String Select Case StrFiledName Case "卡号" FiledName = "cardno" Case "学号" FiledName = "studentNo" Case "姓名" FiledName = "studentName" Case "性别" FiledName = "Sex" Case "学院" FiledName = "department" Case "年级" FiledName = "grade" Case "班级" FiledName = "class" Case "与" FiledName = "and" Case "或" FiledName = "or" End Select End Function
这样一个组合查询完成了,重其中我也收获了财富,遇到错误的时候就是进步的时候,实现这个功能最大的感慨就是SQL语句真的很强大,而我还处在最低级,以后还要努力加油了!