機房收費系統(一)——組合查詢
阿新 • • 發佈:2018-12-30
對於敲完機房收費系統的我們對於組合查詢應該都不在陌生了吧。想想當時我在敲之前聽別人說它比較麻煩的時候,我足足停了兩天才開始對這部分下手。一下手就感覺我之前在學生資訊管理系統裡面見過啊(根據姓名、班級、年級查詢學生資訊),而且它也沒有什麼啊,其實就是我們平常做的查詢啊,就是有時多了幾個條件而已。
一、分析:
組合關係選擇+組合關係約束
二、設計:
1、form load 載入:
2、組合關係選擇: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
以選擇兩層關係為例:
'選兩個組合,三層關係 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
四、總結
不要獨立的去想一件事,每件事都不是孤立的,事務之間總是有聯絡的,運用生活中的和之前接觸過的內容去解決我們現在遇到的東西,總會簡化不少的。