【機房收費系統】——組合查詢
阿新 • • 發佈:2019-01-02
在機房收費系統中,其中的組合查詢僅僅在剛開始的時候構思了一點自己的想
法,但是並沒用付諸於行動,去嘗試自己的是否正確,而是選擇了去看之前看
到的一篇關於組合查詢的部落格,說起來有些愧疚的啊。還好的是當我理清思路
之後剩下的組合查詢都是自己的寫的了。
在這分享一下自己的思路,共分為三步。(以學生基本資訊維護為例)
1.首先窗體的建立,加入需要控制元件等來補充介面。
2.當執行之時需要新增資訊,也就是供使用者選擇的訊息。
Dim a, b, c
'對於控制元件陣列簡單的新增方法!!!
For a = 0 To 2
With Combo1(a)
.AddItem "卡號"
.AddItem "學號"
.AddItem "姓名"
.AddItem "性別"
.AddItem "系別"
.AddItem "年紀"
.AddItem "班級"
End With
Next a
For b = 0 To 2
With Combo2(b)
.AddItem "="
.AddItem "<"
.AddItem ">"
.AddItem "<>"
End With
Next b
For c = 0 To 1
With Combo3(c)
.AddItem "與"
.AddItem "或"
End With
Next c
3.有了控制元件和訊息之後就到了查詢和顯示了。 大家都知道一般的sql查詢語句為 `txtsql='select * from student_info where status='使用' _ and username='" & txtuserno.text & "'"` 我們先來分析一下這個語句,其中前半句 前半句`txtsql='select * from student_info where` 無論放到哪,查什麼的東西都是一樣的。主要的是後面,後面內容主要分為四部分 1.欄位名(status) 2.操作符(=) 3.要查詢的內容,即限制條件('使用') 4.組合關係(and) 知道了這四部分,我們就可以簡單的寫出sql語句了。 (1)由於combo1中新增的資訊為漢語,不能夠在sql語句中直接使用 所以我首先定義了一個過程,來進行轉換。
Private Function tName(Englishname As String) As String
'定義一個過程,進而在進行判斷的時候,可以省略
Select Case Englishname
Case "卡號"
tName = "cardno"
Case "學號"
tName = "studentno"
Case "姓名"
tName = "studentname"
Case "性別"
tName = "sex"
Case "系別"
tName = "department"
Case "年級"
tName = "grade"
Case "班級"
tName = "class"
End Select
End Function
(2)接下來就是查詢語句了。
Private Sub cmdquery_Click()
Dim a(組合關係)
'我將每一行的查詢都分開了,這樣的話可以使整體上看上去更加簡潔,規範。
'調錯等也比較方便。除此之外,他們的txtsql可以繼承上面的!放很多。
'第一行查詢。。。。。。。。。。。。。。。。。。。。。
If Not texttxt(Combo1(0).Text) Then
MsgBox "請輸入第一行欄位名", vbOKOnly + vbExclamation, "提示"
Combo1(0).SetFocus
Exit Sub
ElseIf Not texttxt(Combo2(0).Text) Then
MsgBox "請輸入第一行操作符", vbOKOnly + vbExclamation, "提示"
Combo2(0).SetFocus
Exit Sub
ElseIf Not texttxt(Text1(0).Text) Then
MsgBox "請在第一行輸入要查詢的內容", vbOKOnly + vbExclamation, "提示"
Text1(0).SetFocus
Exit Sub
Else
txtsql = "select * from student_info where " & tName(Combo1(0).Text) & Combo2(0).Text & "'" & Text1(0).Text & "'"
Set mrc = ExecuteSQl(txtsql, msgTxt)
'其中欄位名tName(Combo1(0).Text),操作符Combo2(0).Text,
'查詢的內容Text1(0).Text。
If mrc.EOF Then
MsgBox "當前沒有該內容", vbOKOnly + vbExclamation, "提示"
Exit Sub
Else
If Combo3(0).Text = "" Then
GoTo case1
End If
End If
End If
'第二行。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
Select Case Combo3(0) '判斷與或者非,並記入a(組合關係)
Case "與"
a = "and"
Case "或"
a = "or"
End Select
If Not texttxt(Combo1(1).Text) Then
MsgBox "請輸入第二行欄位名", vbOKOnly + vbExclamation, "提示"
Combo1(1).SetFocus
Exit Sub
ElseIf Not texttxt(Combo2(1).Text) Then
MsgBox "請輸入第二行操作符", vbOKOnly + vbExclamation, "提示"
Combo2(1).SetFocus
Exit Sub
ElseIf Not texttxt(Text1(1).Text) Then
MsgBox "請在第二行輸入要查詢的內容", vbOKOnly + vbExclamation, "提示"
Text1(1).SetFocus
Exit Sub
Else
txtsql = txtsql & a & " " & tName(Combo1(1).Text) & Combo2(1).Text & "'" & Text1(1).Text & "'"
Set mrc = ExecuteSQl(txtsql, msgTxt)
'該語句的第二個txtsql是對於第一行txtsql的繼承,
'後面的分別為組合關係a,欄位名tName(Combo1(1).Text),
'操作符Combo2(1).Text,要查詢的內容Text1(1).Text。
If mrc.EOF Then
MsgBox "當前沒有該內容", vbOKOnly + vbExclamation, "提示"
Exit Sub
Else
If Combo3(1).Text = "" Then
GoTo case1
End If
End If
End If
'第三行。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
Select Case Combo3(1)
Case "與"
a = "and"
Case "或"
a = "or"
End Select
If Not texttxt(Combo1(2).Text) Then
MsgBox "請輸入第三行欄位名", vbOKOnly + vbExclamation, "提示"
Combo1(2).SetFocus
Exit Sub
ElseIf Not texttxt(Combo2(2).Text) Then
MsgBox "請輸入第三行操作符", vbOKOnly + vbExclamation, "提示"
Combo2(2).SetFocus
Exit Sub
ElseIf Not texttxt(Text1(2).Text) Then
MsgBox "請在第三行輸入要查詢的內容", vbOKOnly + vbExclamation, "提示"
Text1(2).SetFocus
Exit Sub
Else
txtsql = txtsql & a & " " & tName(Combo1(2).Text) & Combo2(2).Text & "'" & Text1(2).Text & "'"
Set mrc = ExecuteSQl(txtsql, msgTxt)
'同上
If mrc.EOF Then
MsgBox "當前沒有該內容", vbOKOnly + vbExclamation, "提示"
Exit Sub
Else
GoTo case1
End If
End If
' (3)查詢資訊的展現(這裡是運用了goto語句)
case1:
With myflexgrid
.Rows = 1
.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) = "備註"
.TextMatrix(0, 10) = "型別"
.TextMatrix(0, 11) = "日期"
.TextMatrix(0, 12) = "時間"
Do While mrc.EOF = False
.Rows = .Rows + 1
.CellAlignment = 4
.TextMatrix(.Rows - 1, 0) = mrc.Fields(1)
.TextMatrix(.Rows - 1, 1) = mrc.Fields(2)
.TextMatrix(.Rows - 1, 2) = mrc.Fields(0)
.TextMatrix(.Rows - 1, 3) = mrc.Fields(7)
.TextMatrix(.Rows - 1, 4) = mrc.Fields(4)
.TextMatrix(.Rows - 1, 5) = mrc.Fields(5)
.TextMatrix(.Rows - 1, 6) = mrc.Fields(6)
.TextMatrix(.Rows - 1, 7) = mrc.Fields(3)
.TextMatrix(.Rows - 1, 8) = mrc.Fields(10)
.TextMatrix(.Rows - 1, 9) = mrc.Fields(8)
.TextMatrix(.Rows - 1, 10) = mrc.Fields(14)
.TextMatrix(.Rows - 1, 11) = mrc.Fields(12)
.TextMatrix(.Rows - 1, 12) = mrc.Fields(13)
mrc.MoveNext
Loop
End With
End Sub
當我剛開始的時候想到組合查詢感覺是很複雜的,但是當理清楚其中的思路之
後就感覺簡單了很多。希望大家能夠從此得到一些收穫。