1. 程式人生 > >機房收費系統(一)——組合查詢

機房收費系統(一)——組合查詢

對於敲完機房收費系統的我們對於組合查詢應該都不在陌生了吧。想想當時我在敲之前聽別人說它比較麻煩的時候,我足足停了兩天才開始對這部分下手。一下手就感覺我之前在學生資訊管理系統裡面見過啊(根據姓名、班級、年級查詢學生資訊),而且它也沒有什麼啊,其實就是我們平常做的查詢啊,就是有時多了幾個條件而已。

一、分析:

組合關係選擇+組合關係約束

二、設計:

1、form load 載入:

Private Sub Form_Load()
    Dim i As Integer
    For i = 2 To 5
        MSFlexGrid1.ColWidth(i) = 2500
    Next i
    With MSFlexGrid1
    .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) = "狀態"
    End With
    cmbFieldA.AddItem "教師"
    cmbFieldA.AddItem "註冊日期"
    cmbFieldA.AddItem "註冊時間"
    cmbFieldA.AddItem "登出日期"
    cmbFieldA.AddItem "登出時間"
    cmbFieldA.AddItem "機器名"
    cmbFieldB.AddItem "教師"
    cmbFieldB.AddItem "註冊日期"
    cmbFieldB.AddItem "註冊時間"
    cmbFieldB.AddItem "登出日期"
    cmbFieldB.AddItem "登出時間"
    cmbFieldB.AddItem "機器名"
    cmbFieldC.AddItem "教師"
    cmbFieldC.AddItem "註冊日期"
    cmbFieldC.AddItem "註冊時間"
    cmbFieldC.AddItem "登出日期"
    cmbFieldC.AddItem "登出時間"
    cmbFieldC.AddItem "機器名"
    For i = 0 To 2
        cmbOperator(i).AddItem "="
        cmbOperator(i).AddItem "<>"
        cmbOperator(i).AddItem "<"
        cmbOperator(i).AddItem ">"
    Next i
    cmbCombination(0).AddItem "與"
    cmbCombination(0).AddItem "或"
    cmbCombination(1).AddItem "與"
    cmbCombination(1).AddItem "或"
End Sub
2、組合關係選擇:

     

     

    以選擇兩層關係為例:

 '選兩個組合,三層關係
    If cmbFieldA.ListIndex = -1 Then         '第一條查詢輸入內容(欄位)為空
        MsgBox "請選擇欄位名!", vbOKOnly + vbExclamation, "提示"
        Exit Sub
    End If
    If cmbFieldB.ListIndex = -1 Then         '第二條查詢輸入內容(欄位)為空
        MsgBox "請選擇欄位名!", vbOKOnly + vbExclamation, "提示"
        Exit Sub
    End If
    If cmbFieldC.ListIndex = -1 Then         '第三條查詢輸入內容(欄位)為空      
        MsgBox "請選擇欄位名!", vbOKOnly + vbExclamation, "提示"
        Exit Sub
    End If
’判斷操作符和要查詢的內容是否為空
    For i = 0 To 2
        If cmbOperator(i).ListIndex = -1 Then
            MsgBox "請選擇操作符!", vbOKOnly + vbExclamation, "提示"
            Exit Sub
        End If
        If txtInquire(i).Text = "" Then
            MsgBox "請輸入要查詢的內容!", vbOKOnly + vbExclamation, "提示"
            txtInquire(0).SetFocus
            Exit Sub
        End If
    Next i
'將組合框的內容轉換為與資料庫欄位相對應的內容
    strFieldA = GetStringA(cmbFieldA.Text)
    strFieldB = GetStringA(cmbFieldB.Text)
    strFieldC = GetStringA(cmbFieldC.Text)
    strOperatorA = Trim(cmbOperator(0).Text)
    strOperatorB = Trim(cmbOperator(1).Text)
    strOperatorC = Trim(cmbOperator(2).Text)
    strValueA = Trim(txtInquire(0).Text)
    strValueB = Trim(txtInquire(1).Text)
    strRelationA = GetStringB(cmbCombination(0).Text)
    strRelationB = GetStringB(cmbCombination(1).Text)
'根據條件查詢
    strSQL1 = "select * from worklog_Info where "
    strSQL1 = strSQL1 & strFieldA & strOperatorA & "'" & strValueA & "'" & " " & strRelationA & " " & strFieldB & strOperatorB & "'" & strValueB & "'" & " " & strRelationB & " " & strFieldC & strOperatorC & "'" & strValueC & "'"
    Set objRst1 = ExecuteSQL(strSQL1, strMsgText1)
    If objRst1.EOF Then
        MsgBox "沒有相應的記錄,您可以重新查詢!", vbOKOnly + vbExclamation, "提示"
        cmbFieldA.ListIndex = -1
        cmbFieldB.ListIndex = -1
        cmbFieldC.ListIndex = -1
        cmbOperator(0).ListIndex = -1
        cmbOperator(1).ListIndex = -1
        cmbOperator(2).ListIndex = -1
        txtInquire(0).Text = ""
        txtInquire(1).Text = ""
        txtInquire(2).Text = ""
        cmbCombination(0).ListIndex = -1
        cmbCombination(1).ListIndex = -1
        cmbFieldB.Enabled = False
        cmbFieldC.Enabled = False
        cmbOperator(1).Enabled = False
        cmbOperator(2).Enabled = False
        txtInquire(1).Enabled = False
        txtInquire(2).Enabled = False
        cmbFieldA.SetFocus
        Exit Sub
    End If
    Do While Not objRst1.EOF
        With MSFlexGrid1
            .CellAlignment = 4
            .Rows = .Rows + 1
            .TextMatrix(.Rows - 1, 0) = objRst1.Fields(1)
            .TextMatrix(.Rows - 1, 1) = objRst1.Fields(2)
            .TextMatrix(.Rows - 1, 2) = objRst1.Fields(3)
            .TextMatrix(.Rows - 1, 3) = objRst1.Fields(4)
'如果查詢的內容資料中為空
            If IsNull(objRst1.Fields(5).Value) Then
                .TextMatrix(.Rows - 1, 4) = ""
            Else
            .TextMatrix(.Rows - 1, 4) = objRst1.Fields(5)
            End If
            
            If IsNull(objRst1.Fields(6).Value) Then
                .TextMatrix(.Rows - 1, 5) = ""
            Else
            .TextMatrix(.Rows - 1, 5) = objRst1.Fields(6)
            End If
            
            If IsNull(objRst1.Fields(7).Value) Then
                .TextMatrix(.Rows - 1, 6) = ""
            Else
            .TextMatrix(.Rows - 1, 6) = objRst1.Fields(7)
            End If
            
            If IsNull(objRst1.Fields(8).Value) Then
                .TextMatrix(.Rows - 1, 7) = ""
            Else
                .TextMatrix(.Rows - 1, 7) = objRst1.Fields(8)
            End If
            .ColAlignment(-1) = 2
           
           End With
        objRst1.MoveNext
    Loop
    Set objRst1 = Nothing
End Sub

 3、定義函式,使組合框中的內容與資料庫中的相對應

Private Function GetStringA(strFieldName As String) As String
    Select Case strFieldName
        Case "教師"
            GetStringA = "UserID"
        Case "註冊日期"
            GetStringA = "LoginDate"
        Case "註冊時間"
            GetStringA = "LoginTime"
        Case "登出日期"
            GetStringA = "LogoutDate"
        Case "登出時間"
            GetStringA = "LogoutTime"
        Case "機器名"
            GetStringA = "computer"
    End Select
End Function
'定義一個函式將漢字的組合關係轉化為計算機語言
Private Function GetStringB(strcombotext As String) As String
    Select Case strcombotext
        Case "或"
            GetStringB = "or"
        Case "與"
            GetStringB = "and"
    End Select
End Function

四、總結

不要獨立的去想一件事,每件事都不是孤立的,事務之間總是有聯絡的,運用生活中的和之前接觸過的內容去解決我們現在遇到的東西,總會簡化不少的。