机房收费系统中,组合查询可以算说是一个难点吧。在学生信息管理系统中,也有组合查询,不过那只是简单的组合,然后进行查询。可是,在机房收费系统中,涉及到好多内容。一开始接触,完全就懵了,根本不知道从哪里下手。因为组合查询,我耽误了一段时间。后来,随着系统的深入,对系统也越来越了解,对系统的各项功能也越来越熟悉,对组合查询也就慢慢的产生了好感。
其实,组合查询没有我们想象的那么难。静下心来,想一想,更本就没有那么复杂,只需要一个SQL语句就Ok了。在这里,我们以“上机状态查询”这个窗体,来探讨里边的组合查询。
在这里,虽然看着非常复杂,有三行组合,需要进行查询。其实,我们完全可以以组合关系为点,进行判断。首先如果没有选择组合关系,则默认为是按照第一行的要求进行查询;如果选择了组合关系,则需要两行或三行的条件都得满足。在这里还需要进行一下汉字的转换,因为在这里,字段名是汉字,如果在数据库中查询,更本不识别汉字,需要把汉字转换成相应的字符串,这就需要用到FieldName这个函数。
Private Sub cmdInquire_Click()
Dim mrc As ADODB.Recordset
Dim txtSQL As String
Dim Msgtext As String
txtSQL = "select * from line_info where "
'判断字段名是否为空
If Not testtxt(comboFieldname(0).Text) Then
MsgBox "字段名不能为空,请输入字段名!", vbOKOnly + vbExclamation, "警告"
comboFieldname(0).SetFocus
Exit Sub
End If
'判断操作符是否为空
If Not testtxt(comboOperate(0).Text) Then
MsgBox "操作符不能为空,请选择", vbOKOnly + vbExclamation, "警告"
comboOperate(0).SetFocus
Exit Sub
End If
'判断要查询的内容是否为空
If Not testtxt(txtContent1.Text) Then
MsgBox "请输入需要查询的内容!", vbOKOnly + vbExclamation, "警告"
txtContent1.SetFocus
Exit Sub
End If
txtSQL = txtSQL & FiledName(comboFieldname(0).Text) & " " & comboOperate(0).Text & " '" & txtContent1.Text & "' "
'开始进行组合查询,先进行第一个组合判断
If Trim(comboContent(0).Text <> "") Then
If Trim(comboFieldname(1).Text) = "" Or Trim(comboOperate(1).Text) = "" Or Trim(txtContent2.Text) = "" Then
MsgBox "您选择了组合查询,请输入数据后再进行查询!", vbOKOnly + vbExclamation, "警告"
Exit Sub
Else
txtSQL = txtSQL & FiledName(comboContent(0).Text) & " " & comboFieldname(1).Text & " " & comboOperate(1).Text & " " & txtContent2.Text
End If
End If
'第二个组合查询
If Trim(comboContent(1).Text <> "") Then
If Trim(comboFieldname(2).Text) = "" Or Trim(comboOperate(2).Text) = "" Or Trim(txtContent3.Text) = "" Then
MsgBox "您选择了组合查询,请输入数据后再进行查询!", vbOKOnly + vbExclamation, "警告"
Exit Sub
Else
txtSQL = txtSQL & FiledName(comboContent(1).Text) & " " & comboFieldname(2).Text & " " & comboOperate(2).Text & " " & txtContent3.Text
End If
End If
Debug.Print Msgtext
'开始进行查找
Set mrc = ExecuteSQL(txtSQL, Msgtext)
If mrc.RecordCount = 0 Then
MsgBox "没有您想要查询的记录", vbOKOnly + vbExclamation, "警告"
comboFieldname(0).SetFocus
myflexgrid.Rows = 1
Else
myflexgrid.Rows = 1
With myflexgrid
.Rows = 1
.CellAlignment = 4
.TextMatrix(0, 0) = "卡号"
.TextMatrix(0, 1) = "姓名"
.TextMatrix(0, 2) = "上机日期"
.TextMatrix(0, 3) = "上机时间"
.TextMatrix(0, 4) = "机房号"
Do While Not mrc.EOF
With myflexgrid
.Rows = .Rows + 1
.CellAlignment = 4
.TextMatrix(.Rows - 1, 0) = mrc!cardno
.TextMatrix(.Rows - 1, 1) = mrc!studentname
.TextMatrix(.Rows - 1, 2) = mrc!ondate
.TextMatrix(.Rows - 1, 3) = mrc!OnTime
.TextMatrix(.Rows - 1, 4) = mrc!computer
End With
mrc.MoveNext
Loop
End With
End If
Exit Sub
End Sub
利用FieldName函数,将汉字转换成字符串
Public Function FiledName(StrFiledName As String) As String '将汉字转换为相应的字段名
Select Case StrFiledName
Case "卡号"
FiledName = "cardno"
Case "姓名"
FiledName = "studentname"
Case "上机日期"
FiledName = "ondate"
Case "上机时间"
FiledName = "ontime"
Case "机房号"
FiledName = "computer"
Case "与"
FiledName = "and "
Case "或"
FiledName = "or "
End Select
End Function
这样,一个看似非常复杂的组合查询就完成了。做完组合查询,真正领会到了SQL语句的强大。
其实有些事情看起来很难,一开始让你做,你更本就没有头绪,不知道从哪下手。其实这些都没有多大的关系,勇敢的去做,Just do it!就行了。记住,只要迈出第一步,开始,你就离成功不远了。