1. 程式人生 > >機房——操作員——組合查詢

機房——操作員——組合查詢

機房有幾個重點,組合查詢,上下機,結賬和報表。
今天,就分享下組合查詢
組合查詢,顧名思義,就是多種查詢條件組合的情況下查詢資訊。我們以前接觸到的學生也涉及到了組合查詢,不過相對來說較簡單。
下圖為組合查詢窗體圖
在這裡插入圖片描述
從圖中可以看出,如果沒有選擇第一個組合關係的時候,第二行查詢資訊是不能選擇的,也就是說嗎,當選擇了組合關係後,才會啟用下一行查詢條件。
如圖
在這裡插入圖片描述
程式碼如下

Private Sub Combo7_click()      '第一個組合關係
    If Combo7.Text <> "" Then   '第一個組合關係不為空
        Combo2.Enabled = True   '第二行查詢條件
        Combo5.Enabled = True   '第二行查詢條件
        txt2.Enabled = True     '第二行查詢條件
        Combo8.Enabled = True   '第二個組合關係
    End If
End Sub

Private Sub Combo8_click()      '第二個組合關係
    If Combo8.Text <> "" Then   '第二個組合關係不為空
        Combo3.Enabled = True   '第三行組合關係
        Combo6.Enabled = True   '第三行組合關係
        txt3.Enabled = True     '第三行組合關係
        
    End If
End Sub

接下來便是組合查詢部分
流程圖如下
在這裡插入圖片描述
從流程圖可以看出,當第一行查詢條件不為空時,便可以查詢第一行的資訊,當選擇第一個組合關係後,啟用第二行查詢條件,此時可以結合前兩行的查詢條件查詢資訊。當選擇第二個組合關係後,第三行查詢條件啟用,輸入查詢條件後,此時可以查詢三行的資訊。
部分程式碼如下

 txtsql = "select * from student_info where "
    
    '第一組查詢關係是否完整
    If Combo1.Text = "" Or Combo4.Text = "" Or txt1.Text = "" Then
        MsgBox "請輸入完整的查詢條件!", 48, "提示"
        Exit Sub
        
    Else
        txtsql = "select * from student_info where " & " " & Field(Trim(Combo1.Text)) & " " & Trim(Combo4.Text) & " " & " '" & Trim(txt1.Text) & "'"
' txtsql = "select * from student_info where  " & Field(Trim(Combo1.Text)) & " " & Trim(Combo4.Text) & "  '" & Trim(txt1.Text) & "'"

    End If

    If Combo7 <> "" Then    '此時已選擇第一個組合關係

        If Combo2.Text = "" Or Combo5.Text = "" Or txt2.Text = "" Then
            MsgBox "你已選擇第一個組合關係,請輸入完整的查詢條件", 48, "提示"
            Exit Sub
        Else
'txtsql = txtsql & " " & Field(Combo7.Text) & "" & Field(Combo2.Text) & "" & Combo5.Text & "'" & Trim(txt2.Text) & "'"
txtsql = txtsql & " " & Field(Combo7.Text) & " " & Field(Combo2.Text) & " " & Combo5.Text & "'" & Trim(txt2.Text) & "'"
        End If
    End If

    If Combo8 <> "" Then    '此時已選擇第二個組個關係

        If Combo3.Text = "" Or Combo6.Text = "" Or txt3.Text = "" Then
            MsgBox "你已選擇第二個組合關係,請輸入完整的查詢條件", 48, "提示"
            Exit Sub

        Else
txtsql = txtsql & " " & Field(Combo8.Text) & " " & Field(Combo3.Text) & " " & Combo6.Text & "'" & Trim(txt3.Text) & "'"

'txtsql = txtsql & " " & Field(Combo8.Text) & Field(Trim(Combo3.Text)) & " " & Trim(Combo6.Text) & " " & "'" & Trim(txt3.Text) & "'"
        End If
    End If

    Set mrc = ExecuteSQL(txtsql, msgtext)
    
    If mrc.EOF = True Then
        MsgBox "沒有查詢到該條件的資訊", 48, "提示"
        Exit Sub
    End If

到現在,組合查詢的邏輯已經清楚了,但還是不能查詢出要查詢的資訊,因為給查詢條件進行賦值,也就是說,你的查詢語句寫的OK,但是資料庫不認,因為沒有提前賦值。
下面為賦值程式碼,定義一個select case語句,把組合關係和查詢條件全進行賦值即可:

Public Function Field(i As String) As String
    Select Case i
        Case "卡號"
            Field = "cardno"
        Case "學號"
            Field = "studentno"
        Case "姓名"
            Field = "studentname"
        Case "系別"
            Field = "department"
        Case "年級"
            Field = "grade"
        Case "班級"
            Field = "class"
        Case "性別"
            Field = "sex"
            
        Case "與"
            Field = "and"
        Case "或"
            Field = "or"
    
    End Select
End Function

剩下的就是查詢後再MSHFlexGrid控制元件上顯示了,這個大家都已經輕車熟路了,就不再贅述了。
後期陸續更新,歡迎大家評論區留言!