機房收費系統---組合查詢
阿新 • • 發佈:2018-12-31
在機房收費系統中,在對大型的資料中進行檢索的時候。通過一個欄位進行檢索的時候,往往得到很多沒有價值的結果。這樣的查詢沒有多大意義。所以人們往往通過新增欄位的方式。逐步進行篩選。這樣得到的資料,又少又有用。
通過新增欄位的形式來進行組合篩選。
預設是單個查詢方式。
當使用的多的話,就可以通過新增欄位的形式來進行組合查詢。新增欄位形式如下:
因為,在text中的文字與資料庫中的欄位名不一致,所以這樣的SQL語句達不到要求,所以需要把 text文字中的欄位轉換為資料庫中所使用的欄位。
所以使用了tag屬性:
Private Sub cboField1_Click() '把選擇的欄位轉換成 sql語句中的欄位 If cboField1.Text = "教師" Then cboField1.Tag = "UserId" If cboField1.Text = "上機日期" Then cboField1.Tag = "loginDate" If cboField1.Text = "上機時間" Then cboField1.Tag = "loginTime" If cboField1.Text = "登出日期" Then cboField1.Tag = "logoutDate" If cboField1.Text = "登出時間" Then cboField1.Tag = "logoutTime" If cboField1.Text = "機器號" Then cboField1.Tag = "computer" End Sub Private Sub cboMode1_Click() '把選擇的 欄位 組合關係 轉換成SQL中的 組合關係關鍵字 If cboMode1.Text = "與" Then cboMode1.Tag = "and" If cboMode1.Text = "或" Then cboMode1.Tag = "or" cboField2.Visible = True ’新增欄位,開啟一個新欄位 cboSign2.Visible = True txtInquire2.Visible = True cboMode2.Visible = True End Sub
在下述的查詢中,依次向txtSQL中新增 sql語句,形成的SQL語句形式為:
select * from worklog_Info where (UserId='**' and loginDate='**' and ---) order by serial
然後依次新增檢索欄位如下:
在給控制元件,新增tag屬性的時候,由於我使用的不是控制元件陣列。所以,寫的程式碼有點繁瑣。Private Sub cmdInquire_Click() Dim txtSQL As String Dim MsgText As String Dim mrc As ADODB.Recordset '首先寫一個不完全的SQL語句,一會兒補充 txtSQL = "select * from student_Info where (" & cboField1.Tag & cboSign1.Text & "'" & txtInquire1.Text & "'" If cboMode1.Text <> "" Then '檢驗第二個組合欄位的正確性 If cboField2.Text = "" Then MsgBox "請選擇欄位名!", vbOKOnly + vbExclamation, "警告" cboField2.SetFocus Exit Sub End If If cboSign2.Text = "" Then MsgBox "請輸入操作符!", vbOKOnly + vbExclamation, "警告" cboSign2.SetFocus Exit Sub End If If txtInquire2.Text = "" Then MsgBox "請輸入要查詢的內容", vbOKOnly + vbExclamation, "警告" txtInquire2.SetFocus Exit Sub End If '第二個組合欄位正確,開始新增資訊 txtSQL = txtSQL & " " & cboMode1.Tag & " " & cboField2.Tag & cboSign2.Text & "'" & txtInquire2.Text & "'" End If If cboMode2.Text <> "" Then '檢驗第三組 組合欄位的正確性 If cboField3.Text = "" Then MsgBox "請選擇欄位名!", vbOKOnly + vbExclamation, "警告" cboField3.SetFocus Exit Sub End If If cboSign3.Text = "" Then MsgBox "請輸入操作符!", vbOKOnly + vbExclamation, "警告" cboSign3.SetFocus Exit Sub End If If txtInquire3.Text = "" Then MsgBox "請輸入要查詢的內容", vbOKOnly + vbExclamation, "警告" txtInquire3.SetFocus Exit Sub End If '第三個組合欄位正確,開始新增資訊 txtSQL = txtSQL & " " & cboMode2.Tag & " " & cboField3.Tag & cboSign3.Text & "'" & txtInquire3.Text & "'" End If txtSQL = txtSQL & ") " '把SQL語句補充完整 'Debug.Print txtSQL 用於除錯程式使用 Set mrc = ExecuteSQL(txtSQL, MsgText) If mrc.RecordCount = 0 Then '如果要查詢的結果為空,則提醒使用者 myFlexGrid.Clear MsgBox "結果集為空!", vbOKOnly + vbExclamation, "警告" Exit Sub End If With myFlexGrid '把標題寫上 .Row = 0 .TextMatrix(.Row, 0) = "學號" .TextMatrix(.Row, 1) = "姓名" .TextMatrix(.Row, 2) = "卡號" .TextMatrix(.Row, 3) = "餘額" .TextMatrix(.Row, 4) = "學院" .TextMatrix(.Row, 5) = "專業" .TextMatrix(.Row, 6) = "年級" .TextMatrix(.Row, 7) = "班級" .TextMatrix(.Row, 8) = "性別" .TextMatrix(.Row, 9) = "狀態" .TextMatrix(.Row, 10) = "備註" End With myFlexGrid.Rows = mrc.RecordCount + 1 '設定大小 With myFlexGrid '對查詢到的結果進行遍歷,顯示出來 .Row = 0 While mrc.EOF = False .Row = .Row + 1 .TextMatrix(.Row, 0) = mrc.Fields(1) .TextMatrix(.Row, 1) = mrc.Fields(2) .TextMatrix(.Row, 2) = mrc.Fields(0) .TextMatrix(.Row, 3) = mrc.Fields(8) .TextMatrix(.Row, 4) = mrc.Fields(4) .TextMatrix(.Row, 5) = mrc.Fields(5) .TextMatrix(.Row, 6) = mrc.Fields(6) .TextMatrix(.Row, 7) = mrc.Fields(7) .TextMatrix(.Row, 8) = mrc.Fields(3) .TextMatrix(.Row, 9) = mrc.Fields(11) .TextMatrix(.Row, 10) =mrc.Fields(9) mrc.MoveNext Wend End With End Sub
如果是控制元件資料,可以通過for迴圈來減少程式碼量。