機房收費系統(三)—再看組合查詢
寫在前面:
組合查詢顧名思義是多條件查詢,關鍵就是確定在一定的條件下需要查詢與這個條件想對應的內容,確定好查詢內容之後,每一次查詢都是在上一個條件基礎上加一個條件的查詢。
下面就看一下機房中複合查詢值的關注的地方。
過程:
1.向combobox控制元件中填充資訊
我在新增的時候就是一個個地新增,結果寫了好長的程式碼,在這裡值得學習是設定控制元件陣列,利用索引來設定迴圈往控制元件裡新增資訊,具體的程式碼如下:
Private Sub Form_Load() Dim i, j, k Me.Height = 10185 Me.Width = 15135 Label1.Caption = "輸入查詢條" & Chr(13) & Chr(10) & "件(請在下" & Chr(13) & Chr(10) & "拉)選單中" & Chr(13) & Chr(10) & "選擇" '用迴圈語句向combobox中填充資訊 For i = 0 To 2 With combo1(i) .AddItem "卡號" .AddItem "學號" .AddItem "姓名" .AddItem "性別" .AddItem "系別" .AddItem "年級" .AddItem "班級" End With Next i For j = 0 To 2 With Combo2(j) .AddItem "=" .AddItem "<" .AddItem ">" .AddItem "<>" End With Next j For k = 0 To 1 With Combo3(k) .AddItem "與" .AddItem "或" End With Next k End Sub
2.判斷查詢條件是否為空,定義了一個testtxt函式,當被查詢的內容為空,則testtxt的值為false,否則為true.最後把值賦給isempty變數,這樣就不需要一個個挨著判斷了,不足之處就是使用者會不知道該去填寫哪個查詢條件。
定義了一個testtxt函式用於判斷被判斷的內容是否為空
'定義一個檢查文字框是否為空的函式 Public Function testtxt(txt As String) As Boolean '引數是txt,即文字框內容 If Trim(txt) = "" Then testtxt = False Else testtxt = True End If End Function
把判斷結果返回給isempty,這樣一下子就可以判斷幾個文字框或comboboxl裡的內容是否為空。
3.將漢字轉換成資料庫中的欄位名,自定義函式fieldname函式,如果直接用漢字表示的話,系統識別不出來。'判斷查詢條件是否為空,用到了函式 isempty0 = testtxt(combo1(0).Text) Or testtxt(Combo2(0).Text) Or testtxt(txtinquire(0).Text) If isempty0 = False Then MsgBox "請輸入查詢條件", vbOKOnly, "提示" Exit Sub End If If Combo3(0).Text <> "" Then isempty1 = isempty0 Or testtxt(combo1(1).Text) Or testtxt(Combo2(1).Text) Or testtxt(txtinquire(1).Text) If isempty1 = False Then MsgBox "請輸入查詢條件", vbOKOnly, "提示" Exit Sub End If 'Exit Sub End If If Combo3(1).Text <> "" Then isempty2 = isempty0 Or isempty1 Or testtxt(Combo3(0).Text) Or testtxt(combo1(2).Text) Or testtxt(Combo2(2).Text) Or testtxt(txtinquire(2).Text) If isempty2 = False Then MsgBox "請輸入查詢條件", vbOKOnly, "提示" Exit Sub End If End If
'把漢字轉換成資料庫中的欄位名,可以自定義一個fieldname函式實現
Private Function fieldname(strfieldname As String) As String
Select Case strfieldname
Case "卡號"
fieldname = "cardno"
Case "學號"
fieldname = "studentno"
Case "姓名"
fieldname = "studentname"
Case "性別"
fieldname = "sex"
Case "系別"
fieldname = "department"
Case "年級"
fieldname = "grade"
Case "班級"
fieldname = "class"
End Select
End Function
Private Function fieldname1(strfieldname As String) As String
Select Case strfieldname
Case "與"
fieldname1 = "and"
Case "或"
fieldname1 = "or"
End Select
End Function
4.組合條件的查詢,到這裡的時候像熱鍋上的螞蟻,不知道怎麼是好,現在把思路理清楚了,感覺沒有那麼麻煩了
遇到的問題:
(1).沒有理清楚思路,每個下拉列表框那麼多的條件,不知道該怎麼去寫程式碼了,另外一方面要判斷查詢條件是否為空,條件很多,一時沒有找到好的解決方法,另一方面要確定查詢的內容組合,把這兩部分摻雜在了一起,沒有分成小的模組,思路沒有清楚。
(2).沒有想到複合查詢其實就是在上一個條件基礎上的查詢。
其實符合查詢在敲學生資訊管理系統的時候用到過,現在就來看看學生與機房在組合查詢上的區別以及共同之處吧,方便更好地學習。
學生資訊管理系統:
這是學生中查詢成績資訊的窗體:
程式碼:
首先寫txtsql查詢語句
txtSQL = "select * from result_info where "
一個條件的查詢:當1中有學號資訊時
If Check(0).Value Then
If Trim(Txtsid.Text) = "" Then
MsgBox "學號不能為空", vbOKOnly + vbExclamation, "提示"
Txtsid.SetFocus
Exit Sub
Else
dd(0) = True '作標記,第一個條件被選中
txtSQL = txtSQL & "student_id= '" & Trim(Txtsid.Text) & "'"
End If
End If
兩個條件的查詢:2中有姓名資訊時
If Check(1).Value Then
If Trim(txtname.Text) = "" Then
MsgBox "姓名不能為空", vbOKOnly + vbExclamation, "提示"
txtname.SetFocus
Exit Sub
Else
dd(1) = True
If dd(0) = True Then '如果第一個條件也被選中
txtSQL = txtSQL & " and student_name= '" & txtname.Text & "'"
Else '第一個條件沒有被選中,只選中了第二個條件
txtSQL = txtSQL & "student_name= '" & txtname.Text & "'"
End If
End If
End If
三個條件的查詢:3中有課程資訊時
If Check(2).Value Then
If Trim(txtcourse.Text) = "" Then
MsgBox "課程不能為空!", vbOKOnly + vbExclamation, "提示"
txtcourse.SetFocus
Exit Sub
Else
dd(2) = True '第三個條件被選中
If dd(0) Or dd(1) Then '第一個條件或者第二個條件被選中
txtSQL = txtSQL & "and course_name= '" & txtcourse.Text & "'"
Else '前兩個條件都沒有被選中
txtSQL = txtSQL & "course_name= '" & txtcourse.Text & "'"
End If
End If
End If
機房收費系統:
以學生基本資訊維護窗體為例:
當沒有4與5的時候,只對1條件進行查詢,當4中有組合關係時,對1和2兩個條件進行組合查詢,當5中有組合關係時,對1,2,3三個條件進行組合查詢。
程式碼如下:
'一個條件的查詢
txtsql = "select * from student_info where " & fieldname(combo1(0).Text) & Combo2(0).Text & "'" & Trim(txtinquire(0).Text) & "'"
If Combo3(0).Text <> "" Then
'新增第二個條件的查詢
txtsql = txtsql & fieldname1(Combo3(0).Text) & " " & fieldname(combo1(1).Text) & Combo2(1).Text & "'" & Trim(txtinquire(1).Text) & "'"
End If
If Combo3(1).Text <> "" Then
'新增第三個條件的查詢
txtsql = txtsql & fieldname1(Combo3(1).Text) & " " & fieldname(combo1(2).Text) & Combo2(2).Text & " '" & Trim(txtinquire(2).Text) & "'"
End If
Set mrc = executesql(txtsql, msgtext)
經過與學生資訊管理系統進行對比,我們會發現組合查詢其實沒有實質性的區別,複合查詢都是在上一個條件的基礎上加一個條件的查詢。
總結:
思想:學習過程中顆粒歸倉,及時總結,多尋找聯絡,多建立聯絡,每遇到一個完全陌生的問題的時候,要想以前是否遇見過,要相信用於都沒有孤立的知識單獨存在,建立知識網。另外在寫程式之前一定要先理清思路。
技術:對於複雜,重複的操作,我們可以定義一個函式實現,用的時候直接呼叫該函式就可以,提高程式的複用性。對於多條件的查詢,把複雜問題簡單化,化成在原來基礎上加一個條件的查詢。
相關推薦
機房收費系統(三)—再看組合查詢
寫在前面: 組合查詢顧名思義是多條件查詢,關鍵就是確定在一定的條件下需要查詢與這個條件想對應的內容,確定好查詢內容之後,每一次查詢都是在上一個條件基礎上加一個條件的查詢。 下面就看一下機房中複合查詢
機房收費系統(三)-組合查詢
【前言】 一拖再拖,組合查詢終於做完了,並且弄明白了其中的含義。下面就以操作員的工作記錄窗體為例,來總結一下組合查詢吧! 【內容】 組合查詢: 第一行(可單獨查詢)即為第一個條件,第二行為第二個條件,第三行為第三個條件。利用“組合關係”控制元件將條件連線起來,進行組合查詢。 導圖 這張
機房收費系統(三)——登入介面
概述 機房收費系統其實和學生資訊管理系統差不多,難度麼有增加多少。關鍵在於需要我們在敲程式碼之前把思路搞清楚,程式碼並不是什麼大事。這裡我就採用了畫流程圖的形式,把要實現的功能都畫出來,然後進行程式碼的編輯。下面就來分享我的思路和部分程式碼。 流程圖
機房收費系統(二)項目開發計劃
tro 外部 程序語言 友好 知識 add sql 數據庫 名稱 項目開發計劃 1引言 1.1編寫目的 主要對開發機房收費系統的費用、時間、進度、人員組織、硬件設備的配置、開發環境和執行環境的配置進行說明。為開發的下一步做準備。預期讀者是系統分析員和開發者。
機房收費系統(二)-上下機
【前言】 開始做機房時間也不短了,也看了不少大佬的部落格,但是真的是每個人有每個人的思路,所以我也有了自己的思路。剛開始的時候沒有什麼思路,不知道如何下手,只有靜下心來,一點點往下走,才能理清自己的思路。有些地方可能還存在不足,望指點。 【內容】 上機和下機導圖 上機程式碼 Priv
機房收費系統(一)-命名規範
【前言】 命名規範至關重要,做好機房系統的第一步工作。 【內容】 1.主選單命名 一般使用者:GeneralUser 學生檢視餘額:StuInquiryBalanceMenu 學生檢視上機記錄:StuInquiryLineRecordMenu 學生充值記錄查詢:StuInquiryRec
機房收費系統(一)------登入&修改
前言 進行機房也有一段時間了,一直處於走迷宮的狀態不知從何入手。從生活中出發,我們在使用某個系統時,一般情況下最先進入該系統的登入頁面。現在輪到自己敲系統了,當然也是從登入開始啦。 正文 機房收費系統登入窗體的思路,和有原始碼的學生系統的思路是大同
機房收費系統(一)——組合查詢
對於敲完機房收費系統的我們對於組合查詢應該都不在陌生了吧。想想當時我在敲之前聽別人說它比較麻煩的時候,我足足停了兩天才開始對這部分下手。一下手就感覺我之前在學生資訊管理系統裡面見過啊(根據姓名、班級、
機房收費系統(四)---組合查詢
涉及的窗體有學生基本資訊維護,學生上機記錄查詢,學生上機統計查詢初次見到組合查詢介面,有種似曾相識的感覺。沒錯,我們在學生資訊管理系統裡面見過類似的。也可以說我們已經接觸過組合查詢了。不同的是這次的組合查詢要多一點,相對來講複雜一點。今天我就用學生基本資訊維
機房收費系統(四)-結賬
【前言】 在寫結賬程式碼之前,我們要明白結賬的含義和思路。 含義:是誰來結賬?結的是誰的賬?這是必須弄明白的。 結賬:是管理員來結賬,管理員結的是操作員的賬。 之前總是聽別人說結賬是個難點,所以心裡有點抵觸,並且不想去做,感覺自己不會做,弄不明白。只有做過之後才
機房收費系統(七)——學生基本資訊維護
概述 學生基本資訊維護裡面所用到的知識點有查詢類,更準確的說是組合查詢。該知識點堪稱機房收費系統三大難點之一。那麼它的難到底難在哪裡?下面我們來逐一進行分析。 流程圖 通過上面兩張圖可以清晰的看到,查詢難在哪裡: 首先、我們需要進行判斷查詢是
機房收費系統(一)——退卡操作
在敲機房的時候,感覺退卡挺簡單的,很快的完成了。但是驗收的時候,它卻出問題了——該卡正在上機,可以退卡,但是卻沒有對下機進行處理。現在重新來實現這個功能,其實仍然也是很簡單的。 一、整理思路
【機房收費系統合作版】——再看外觀模式
前言:這次合作版機房,在小夥伴們的商量下,決定使用外觀模式。由於個人版的時候,因為各種原因,未能使用這一模式。現在,藉著這次機會,重新認識一下這位故友。 我們先看下邊的一張圖: 這張圖
機房收費系統(1)-註冊控制元件
根據師哥給的機房收費系統使用說明:在cmd命令中輸入“regsvr +路徑+控制元件名稱,相信大家在操作的時候都有如下試水。 看看犯的錯誤都覺得可笑,把”+“都給人家輸上了。圖中的錯誤提示框是最後一
機房收費系統(二)之下機退卡
今天我又回顧了一下 機房管理系統,看見了我熟悉的花費了我三天才敲好的窗體(當然想了兩天),然後今天我就來總結一下下機退卡吧! 第一句話是讓子窗體在父窗體中的圖片框裡顯示! 其他的然後就是定義函式名
機房收費系統(VB.NET)個人版總結
blog gb2 watermark ast 做到 解決 content 結果 avi 重構版個人機房收費系統大概從暑假開學開始進行。花了不到一個半月的時間才完畢。以下對我在重構過程中的一寫理解。 1、系統設計一個非常重要的目的就是重用。而要做
機房收費系統(命名篇)
主介面選單編輯器命名如下 PS:(用menu作字尾) 一般使用者 GeneralUser 學生檢視餘額 InquiryBalance學生檢視上機記錄 InquiryLineRecord學生充值記錄查詢 InquiryRechargeRec
機房收費系統(準備篇)
開始機房前,我預計先學習觀看一下11期師哥師姐打包給12期師哥師姐的機房系統,於是我安裝後點擊開始,出現錯誤: 執行錯誤’91’:未設定物件變數或with block變數 這個是因為沒有連線到資料庫,所以我需要配置ODBC,配置過程如下: 在這裡我們看到了,
機房系統(三)——【充值 & 退卡 】
前言 充值在我們的日常生活中隨處可見。新辦理的手機卡號,為保證在無WiFi的情況下,我們可以使用,不與外界失聯,手機卡號裡面要有錢,我們才能正常上網、接打電話等。註冊完卡號資訊後,為保證這個卡能為我們正常所用,卡里需要有足夠的金額。所以,就需要我們時常進行
【 專欄 】- 機房收費系統(VB版+C#)
機房收費系統(VB版+C#) VB與資料庫的互動,VB各種控制元件的調整,SQL語句的熟練使用,以及後期系統的除錯優化,以小見大,都能給我們很好的啟發! 後期的C#重構的機房收費系統,對於三層的理解,資料庫的設計,設計模式的使用