您的位置:首页 > 数据库

机房收费系统(二)——组合查询

2012-10-02 08:26 405 查看
             一个组合查询做了两天,也纠结了两天,现在就晒晒这两天的经历吧。刚看到这个窗体,觉得很复杂,比起学生信息管理系统中的那个组合查询复杂多了,于是就选择最后做这个窗体。

        


首先说说刚开始我使用的方式:

        先对字段名、操作符、查询内容进行选择,然后再看组合关系,想着依照此窗体的操作顺序来进行代码的书写,可是到了最后,却发现一个问题,第一个组合查询做出来了,但是其他的组合查询虽然也能做出来,但是其代码量大,重复多,并且循环关系复杂,没有新意。这让我很是郁闷,也就放弃了按照窗体操作顺序来进行代码的书写。

现在使用的方式:

       后来听另一个朋友的讲解,我有了新思路。

        以组合关系作为判断依据,将SQL语句分为三类:

                第一类:如果没有选择组合关系;

                第二类:只选择了一个组合关系;

                第三类:两个组合关系均选择。

       如果选择了第一个组合关系,则blnjudge1=true,如果选择了第二个组合关系,则blnjudge2=true。

       然后再拼接SQL语句,这样就比前面那种方法简单多了。

       具体代码如下:

Private Sub cmdQuery_Click()  '查询

Dim ObjRs As ADODB.Recordset
Dim strtxtsql As String
Dim strMsgText As String
Dim blnJudge1 As Boolean
Dim blnJudge2 As Boolean
Dim strStdinfo(3) As String    '字段名
Dim stroperator(3)  As String   '操作符
Dim strQuery(3) As String      '查询语句
Dim strRelationship(3) As String  '组合关系

strtxtsql = "select * from studentinfo where"
'字段名选择
If Not TestText(Trim$(cmbStdInfo1.Text)) Then
MsgBox "请选择字段名!", vbOKOnly + vbExclamation, "警告"
cmbStdInfo1.SetFocus
Exit Sub
Else
Select Case cmbStdInfo1.ListIndex
Case 0
strStdinfo(0) = "cardno"
Case 1
strStdinfo(0) = "studentid"
Case 2
strStdinfo(0) = "studentname"
Case 3
strStdinfo(0) = "sex"
Case 4
strStdinfo(0) = "dapartment"
Case 5
strStdinfo(0) = "grade"
Case 6
strStdinfo(0) = "class"
End Select
End If

'操作符选择
If Not TestText(Trim$(cmbOperator1.Text)) Then
MsgBox "请选择操作符!", vbOKOnly + vbExclamation, "警告"
cmbOperator1.SetFocus
Exit Sub
Else
Select Case cmbOperator1.ListIndex
Case 0
stroperator(0) = "<"
Case 1
stroperator(0) = ">"
Case 2
stroperator(0) = "="
Case 3
stroperator(0) = "<>"
End Select
End If

'查询内容输入
If Not TestText(Trim$(txtQuery1.Text)) Then
MsgBox "要查询的内容!"
cmbStdInfo1.SetFocus
Exit Sub
Else
strQuery(0) = Trim$(txtQuery1.Text)
End If

If Not TestText(Trim$(cmbRelationship1.Text)) Then
strtxtsql = strtxtsql & " " & strStdinfo(0) & " " & stroperator(0) & "'" & strQuery(0) & "'"
Set ObjRs = ExecuteSQL(strtxtsql, strMsgText)
'若第一个判定符为空
If ObjRs.EOF = True Then
MsgBox "没有此记录!", vbOKOnly + vbExclamation, "警告"
MSFlexGrid1.Clear
Call viewData
Exit Sub
Else
Call viewData
Do While Not ObjRs.EOF
With MSFlexGrid1
.Rows = .Rows + 1
.CellAlignment = 4
.TextMatrix(.Rows - 1, 0) = Trim$(ObjRs.Fields(0))
.TextMatrix(.Rows - 1, 1) = Trim$(ObjRs.Fields(1))
.TextMatrix(.Rows - 1, 2) = Trim$(ObjRs.Fields(2))
.TextMatrix(.Rows - 1, 3) = Trim$(ObjRs.Fields(3))
.TextMatrix(.Rows - 1, 4) = Trim$(ObjRs.Fields(4))
.TextMatrix(.Rows - 1, 5) = Trim$(ObjRs.Fields(5))
.TextMatrix(.Rows - 1, 6) = Trim$(ObjRs.Fields(6))
.TextMatrix(.Rows - 1, 7) = Trim$(ObjRs.Fields(7))
.TextMatrix(.Rows - 1, 8) = Trim$(ObjRs.Fields(8))
.TextMatrix(.Rows - 1, 9) = Trim$(ObjRs.Fields(9))
ObjRs.MoveNext
End With
Loop
ObjRs.Close
Exit Sub
End If
Else
'第一个判定符不为空
blnJudge2 = True
Select Case cmbRelationship1.ListIndex
Case 0
strRelationship(0) = "or"
Case 1
strRelationship(0) = "and"
End Select

'选择字段
If Not TestText(Trim$(cmbStdInfo2.Text)) Then
MsgBox "请选择字段名!", vbOKOnly + vbExclamation, "警告"
cmbStdInfo2.SetFocus
Exit Sub
Else
Select Case cmbStdInfo2.ListIndex
Case 0
strStdinfo(1) = "cardno"
Case 1
strStdinfo(1) = "studentid"
Case 2
strStdinfo(1) = "studentname"
Case 3
strStdinfo(1) = "sex"
Case 4
strStdinfo(1) = "dapartment"
Case 5
strStdinfo(1) = "grade"
Case 6
strStdinfo(1) = "class"
End Select
End If

'操作符选择
If Not TestText(Trim$(cmbOperator2.Text)) Then
MsgBox "请选择操作符!", vbOKOnly + vbExclamation, "警告"
cmbOperator2.SetFocus
Exit Sub
Else
Select Case cmbOperator2.ListIndex
Case 0
stroperator(1) = "<"
Case 1
stroperator(1) = ">"
Case 2
stroperator(1) = "="
Case 3
stroperator(1) = "<>"
End Select
End If

'查询内容输入
If Not TestText(Trim$(txtQuery2.Text)) Then
MsgBox "请输入要查询的内容!"
txtQuery2.SetFocus
Exit Sub
Else
strQuery(1) = Trim$(txtQuery2.Text)
End If
End If

'若选择了第二个判定符
If TestText(Trim$(cmbRelationship2.Text)) Then
blnJudge1 = True
Select Case cmbRelationship2.ListIndex
Case 0
strRelationship(1) = "or"
Case 1
strRelationship(1) = "and"
End Select

'字段选择
If Not TestText(Trim$(cmbStdInfo3.Text)) Then
MsgBox "请选择字段名!"
cmbStdInfo3.SetFocus
Exit Sub
Else
Select Case cmbStdInfo3.ListIndex
Case 0
strStdinfo(2) = "cardno"
Case 1
strStdinfo(2) = "studentid"
Case 2
strStdinfo(2) = "studentname"
Case 3
strStdinfo(2) = "sex"
Case 4
strStdinfo(2) = "dapartment"
Case 5
strStdinfo(2) = "grade"
Case 6
strStdinfo(2) = "class"
End Select
End If

'操作符选择
If Not TestText(Trim$(cmbOperator3.Text)) Then
MsgBox "请选择操作符!", vbOKOnly + vbExclamation, "警告"
cmbOperator3.SetFocus
Exit Sub
Else
Select Case cmbOperator3.ListIndex
Case 0
stroperator(2) = "<"
Case 1
stroperator(2) = ">"
Case 2
stroperator(2) = "="
Case 3
stroperator(2) = "<>"
End Select
End If

'查询内容输入
If Not TestText(Trim$(txtQuery3.Text)) Then
MsgBox "请输入内容!"
txtQuery3.SetFocus
Exit Sub
Else
strQuery(2) = Trim$(txtQuery3.Text)
End If
End If

If blnJudge2 = True And blnJudge1 = False Then
'一真一假,且关系为and
If strRelationship(0) = "and" Then
strtxtsql = strtxtsql & " " & strStdinfo(0) & " " & stroperator(0) & " '" & strQuery(0) & "' and" & " " & strStdinfo(1) & " " & stroperator(1) & " '" & strQuery(1) & "'"
Set ObjRs = ExecuteSQL(strtxtsql, strMsgText)
If ObjRs.EOF = True Then
MsgBox "没有此记录!", vbOKOnly + vbExclamation, "警告"
MSFlexGrid1.Clear
Call viewData
'                blnJudge = True
Exit Sub
Else
Call viewData
Do While Not ObjRs.EOF
With MSFlexGrid1
.Rows = .Rows + 1
.CellAlignment = 4
.TextMatrix(.Rows - 1, 0) = Trim$(ObjRs.Fields(0))
.TextMatrix(.Rows - 1, 1) = Trim$(ObjRs.Fields(1))
.TextMatrix(.Rows - 1, 2) = Trim$(ObjRs.Fields(2))
.TextMatrix(.Rows - 1, 3) = Trim$(ObjRs.Fields(3))
.TextMatrix(.Rows - 1, 4) = Trim$(ObjRs.Fields(4))
.TextMatrix(.Rows - 1, 5) = Trim$(ObjRs.Fields(5))
.TextMatrix(.Rows - 1, 6) = Trim$(ObjRs.Fields(6))
.TextMatrix(.Rows - 1, 7) = Trim$(ObjRs.Fields(7))
.TextMatrix(.Rows - 1, 8) = Trim$(ObjRs.Fields(8))
.TextMatrix(.Rows - 1, 9) = Trim$(ObjRs.Fields(9))
ObjRs.MoveNext
End With
Loop
ObjRs.Close
Exit Sub
End If
Else
'一真一假,且关系为or
strtxtsql = strtxtsql & " " & strStdinfo(0) & " " & stroperator(0) & " '" & strQuery(0) & "' or" & " " & strStdinfo(1) & " " & stroperator(1) & " '" & strQuery(1) & "'"
Set ObjRs = ExecuteSQL(strtxtsql, strMsgText)
If ObjRs.EOF = True Then
MsgBox "没有此记录!", vbOKOnly + vbExclamation, "警告"
MSFlexGrid1.Clear
Call viewData
'                blnJudge = True
Exit Sub
Else
Call viewData
Do While Not ObjRs.EOF
With MSFlexGrid1
.Rows = .Rows + 1
.CellAlignment = 4
.TextMatrix(.Rows - 1, 0) = Trim$(ObjRs.Fields(0))
.TextMatrix(.Rows - 1, 1) = Trim$(ObjRs.Fields(1))
.TextMatrix(.Rows - 1, 2) = Trim$(ObjRs.Fields(2))
.TextMatrix(.Rows - 1, 3) = Trim$(ObjRs.Fields(3))
.TextMatrix(.Rows - 1, 4) = Trim$(ObjRs.Fields(4))
.TextMatrix(.Rows - 1, 5) = Trim$(ObjRs.Fields(5))
.TextMatrix(.Rows - 1, 6) = Trim$(ObjRs.Fields(6))
.TextMatrix(.Rows - 1, 7) = Trim$(ObjRs.Fields(7))
.TextMatrix(.Rows - 1, 8) = Trim$(ObjRs.Fields(8))
.TextMatrix(.Rows - 1, 9) = Trim$(ObjRs.Fields(9))
ObjRs.MoveNext
End With
Loop
ObjRs.Close
Exit Sub
End If
End If
End If

If blnJudge1 = True And blnJudge2 = True Then
'两个均为真,且两者均为and
If strRelationship(1) = "and" And strRelationship(0) = "and" Then
strtxtsql = strtxtsql & " " & strStdinfo(0) & " " & stroperator(0) & " '" & strQuery(0) & "' and" & " " & strStdinfo(1) & " " & stroperator(1) & " '" & strQuery(1) & "' and" & " " & strStdinfo(2) & " " & stroperator(2) & " '" & strQuery(2) & "'"
Set ObjRs = ExecuteSQL(strtxtsql, strMsgText)
If ObjRs.EOF = True Then
MsgBox "没有此记录!", vbOKOnly + vbExclamation, "警告"
MSFlexGrid1.Clear
Call viewData
'                blnJudge = True
Exit Sub
Else
Call viewData
Do While Not ObjRs.EOF
With MSFlexGrid1
.Rows = .Rows + 1
.CellAlignment = 4
.TextMatrix(.Rows - 1, 0) = Trim$(ObjRs.Fields(0))
.TextMatrix(.Rows - 1, 1) = Trim$(ObjRs.Fields(1))
.TextMatrix(.Rows - 1, 2) = Trim$(ObjRs.Fields(2))
.TextMatrix(.Rows - 1, 3) = Trim$(ObjRs.Fields(3))
.TextMatrix(.Rows - 1, 4) = Trim$(ObjRs.Fields(4))
.TextMatrix(.Rows - 1, 5) = Trim$(ObjRs.Fields(5))
.TextMatrix(.Rows - 1, 6) = Trim$(ObjRs.Fields(6))
.TextMatrix(.Rows - 1, 7) = Trim$(ObjRs.Fields(7))
.TextMatrix(.Rows - 1, 8) = Trim$(ObjRs.Fields(8))
.TextMatrix(.Rows - 1, 9) = Trim$(ObjRs.Fields(9))
ObjRs.MoveNext
End With
Loop
ObjRs.Close
Exit Sub
End If
End If

'两者均为or
If strRelationship(1) = "or" And strRelationship(0) = "or" Then
strtxtsql = strtxtsql & " " & strStdinfo(0) & " " & stroperator(0) & " '" & strQuery(0) & "' or" & " " & strStdinfo(1) & " " & stroperator(1) & " '" & strQuery(1) & "' or" & " " & strStdinfo(2) & " " & stroperator(2) & " '" & strQuery(2) & "'"
Set ObjRs = ExecuteSQL(strtxtsql, strMsgText)
If ObjRs.EOF = True Then
MsgBox "没有此记录!", vbOKOnly + vbExclamation, "警告"
MSFlexGrid1.Clear
Call viewData
'                blnJudge = True
Exit Sub
Else
Call viewData
Do While Not ObjRs.EOF
With MSFlexGrid1
.Rows = .Rows + 1
.CellAlignment = 4
.TextMatrix(.Rows - 1, 0) = Trim$(ObjRs.Fields(0))
.TextMatrix(.Rows - 1, 1) = Trim$(ObjRs.Fields(1))
.TextMatrix(.Rows - 1, 2) = Trim$(ObjRs.Fields(2))
.TextMatrix(.Rows - 1, 3) = Trim$(ObjRs.Fields(3))
.TextMatrix(.Rows - 1, 4) = Trim$(ObjRs.Fields(4))
.TextMatrix(.Rows - 1, 5) = Trim$(ObjRs.Fields(5))
.TextMatrix(.Rows - 1, 6) = Trim$(ObjRs.Fields(6))
.TextMatrix(.Rows - 1, 7) = Trim$(ObjRs.Fields(7))
.TextMatrix(.Rows - 1, 8) = Trim$(ObjRs.Fields(8))
.TextMatrix(.Rows - 1, 9) = Trim$(ObjRs.Fields(9))
ObjRs.MoveNext
End With
Loop
ObjRs.Close
Exit Sub
End If
End If

'一个为and一个为or
If strRelationship(1) = "and" And strRelationship(0) = "or" Then
strtxtsql = strtxtsql & " " & strStdinfo(0) & " " & stroperator(0) & " '" & strQuery(0) & "' or" & " " & strStdinfo(1) & " " & stroperator(1) & " '" & strQuery(1) & "' and" & " " & strStdinfo(2) & " " & stroperator(2) & " '" & strQuery(2) & "'"
Set ObjRs = ExecuteSQL(strtxtsql, strMsgText)
If ObjRs.EOF = True Then
MsgBox "没有此记录!", vbOKOnly + vbExclamation, "警告"
MSFlexGrid1.Clear
Call viewData
'                blnJudge = True
Exit Sub
Else
Call viewData
Do While Not ObjRs.EOF
With MSFlexGrid1
.Rows = .Rows + 1
.CellAlignment = 4
.TextMatrix(.Rows - 1, 0) = Trim$(ObjRs.Fields(0))
.TextMatrix(.Rows - 1, 1) = Trim$(ObjRs.Fields(1))
.TextMatrix(.Rows - 1, 2) = Trim$(ObjRs.Fields(2))
.TextMatrix(.Rows - 1, 3) = Trim$(ObjRs.Fields(3))
.TextMatrix(.Rows - 1, 4) = Trim$(ObjRs.Fields(4))
.TextMatrix(.Rows - 1, 5) = Trim$(ObjRs.Fields(5))
.TextMatrix(.Rows - 1, 6) = Trim$(ObjRs.Fields(6))
.TextMatrix(.Rows - 1, 7) = Trim$(ObjRs.Fields(7))
.TextMatrix(.Rows - 1, 8) = Trim$(ObjRs.Fields(8))
.TextMatrix(.Rows - 1, 9) = Trim$(ObjRs.Fields(9))
ObjRs.MoveNext
End With
Loop
ObjRs.Close
Exit Sub
End If
End If

'一个为or一个为and
If strRelationship(1) = "or" And strRelationship(0) = "and" Then
strtxtsql = strtxtsql & " " & strStdinfo(0) & " " & stroperator(0) & " '" & strQuery(0) & "' and" & " " & strStdinfo(1) & " " & stroperator(1) & " '" & strQuery(1) & "' or" & " " & strStdinfo(2) & " " & stroperator(2) & " '" & strQuery(2) & "'"
Set ObjRs = ExecuteSQL(strtxtsql, strMsgText)
If ObjRs.EOF = True Then
MsgBox "没有此记录!", vbOKOnly + vbExclamation, "警告"
MSFlexGrid1.Clear
Call viewData
'                blnJudge = True
Exit Sub
Else
Call viewData
Do While Not ObjRs.EOF
With MSFlexGrid1
.Rows = .Rows + 1
.CellAlignment = 4
.TextMatrix(.Rows - 1, 0) = Trim$(ObjRs.Fields(0))
.TextMatrix(.Rows - 1, 1) = Trim$(ObjRs.Fields(1))
.TextMatrix(.Rows - 1, 2) = Trim$(ObjRs.Fields(2))
.TextMatrix(.Rows - 1, 3) = Trim$(ObjRs.Fields(3))
.TextMatrix(.Rows - 1, 4) = Trim$(ObjRs.Fields(4))
.TextMatrix(.Rows - 1, 5) = Trim$(ObjRs.Fields(5))
.TextMatrix(.Rows - 1, 6) = Trim$(ObjRs.Fields(6))
.TextMatrix(.Rows - 1, 7) = Trim$(ObjRs.Fields(7))
.TextMatrix(.Rows - 1, 8) = Trim$(ObjRs.Fields(8))
.TextMatrix(.Rows - 1, 9) = Trim$(ObjRs.Fields(9))
ObjRs.MoveNext
End With
Loop
ObjRs.Close
Exit Sub
End If
End If
End If

End Sub
Sub viewData()

    With MSFlexGrid1
        .Rows = 1
        .Cols = 10
        .CellAlignment = 4
        .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) = "备注"
    End With

End Sub

       

   

        

   

        
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  string class sql