1. 程式人生 > >機房收費系統(三)—再看組合查詢

機房收費系統(三)—再看組合查詢

寫在前面

組合查詢顧名思義是多條件查詢,關鍵就是確定在一定的條件下需要查詢與這個條件想對應的內容,確定好查詢內容之後,每一次查詢都是在上一個條件基礎上加一個條件的查詢。

下面就看一下機房中複合查詢值的關注的地方。

過程:

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裡的內容是否為空。

'判斷查詢條件是否為空,用到了函式
    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
3.將漢字轉換成資料庫中的欄位名,自定義函式fieldname函式,如果直接用漢字表示的話,系統識別不出來。
'把漢字轉換成資料庫中的欄位名,可以自定義一個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#重構的機房收費系統,對於三層的理解,資料庫的設計,設計模式的使用