1. 程式人生 > >【機房收費系統——組合查詢】

【機房收費系統——組合查詢】

             先來說說我們普遍存在的一種心理,就是我們看到組合查詢的那個介面的時候我們當時就被自己給打死了,我們的第一反應就是這是個什麼東西,這麼多的框框,所以就給組合查詢蒙上了一層 “很難”的面紗,但是當我們仔細想想我們好像在那見過這樣的知識。仔細想想,,,,,,終於在記憶深處找到了一點安慰,那就是學生資訊管理系統中的這個介面(回憶舊識):

      

      相當這我們的心情應該大好啊!這就給我們提供了很好的思路,這就是個小組合查詢啊。下面說說我的組合查詢思路:

     

    最後兩個組合框是選擇組合關係的(與  或),同時在我的程式碼中它們關係著它們下面的控制元件是否可以為空。也就是說如果我們查詢的包含一個條件,我們應該填寫在第一行中,如果我們選擇了一個組合關係的文字框中,那麼下面的控制元件框就不能為空,具體程式碼如下:

   txtSQL = "select * from line_Info where "
  
    '判斷欄位的選擇是否為空
  
    If combfiled(0).Text = "" Then
  
        MsgBox "請選擇欄位!", vbOKOnly + vbExclamation, "警告"
  
        combfiled(0).SetFocus
        Exit Sub
  
    End If
  
                                             '判斷操作符的選擇是否為空
  
    If comboperate(0).Text = "" Then
  
        MsgBox "請選擇操作符!", vbOKOnly + vbExclamation, "警告"
  
        comboperate(0).SetFocus
  
        Exit Sub
  
    End If
  
    '判斷要查詢的內容是否為空
  
    If txtcontent(0).Text = "" Then
  
        MsgBox "請在輸入要查詢的內容", vbOKOnly + vbExclamation, "警告"
  
        txtcontent(0).SetFocus
  
        Exit Sub
  
    End If
  
    txtSQL = txtSQL & ZhuangHuan(combfiled(0).Text) & " " & comboperate(0).Text & "'" & txtcontent(0).Text & "'"
  
   
  
    '利用模版函式檢視是否是組合查詢第一行為空時,查詢無效
  
    '開始組合查詢
  
    If Trim(combrelation(0).Text <> "") Then
  
        If Trim(combfiled(1).Text) = "" Or Trim(comboperate(1).Text) = "" Or Trim(txtcontent(1).Text) = "" Then
  
            MsgBox "您選擇了組合關係,請輸入資料之後再查詢", vbOKOnly, "提示資訊"
  
            Exit Sub
  
        Else
  
            txtSQL = txtSQL & ZhuangHuan(combrelation(0).Text) & " " & ZhuangHuan(combfiled(1).Text) & comboperate(1).Text & "'" & Trim(txtcontent(1).Text) & "'"
  
        End If
  
    End If
  
    If Trim(combrelation(1).Text) <> "" Then
  
        If Trim(combfiled(2).Text) = "" Or Trim(comboperate(2).Text) = "" Or Trim(txtcontent(2).Text) = "" Then
  
            MsgBox "您選擇了第二個組合,請輸入資料之後在查詢", vbOKOnly, "提示"
  
            Exit Sub
  
        Else
  
            txtSQL = txtSQL & ZhuangHuan(combrelation(1).Text) & " " & ZhuangHuan(combfiled(2).Text) & comboperate(2).Text & "'" & Trim(txtcontent(2).Text) & "'"
  
        End If
  
    End If
  
   
  
                                                 '開始進行查詢
  
   
  
    Set mrc = ExecuteSQL(txtSQL, MsgText)
    到這我們的查詢的主要程式碼就可以了。

    當然這樣我們的程式碼還是不能執行,因為我們的組合框中是填寫的漢字所以我們需要一個轉換函式,把我們控制元件框中的漢字轉換成符號.

Public Function ZhuangHuan(StrZhuangHuan As String) As String
  
    Select Case StrZhuangHuan
  
    Case "卡號"
  
        ZhuangHuan = "cardno"
  
    Case "姓名"
  
        ZhuangHuan = "studentname"
  
    Case "上機日期"
  
        ZhuangHuan = "ondate"
  
    Case "上機時間"
  
        ZhuangHuan = "ontime"
  
    Case "下機日期"
  
        ZhuangHuan = "offdate"
  
    Case "下機時間"
  
        ZhuangHuan = "offtime"
        
    Case "消費金額"
  
        ZhuangHuan = "consume"
        
    Case "餘額"
  
        ZhuangHuan = "cash"
  
    Case "與"
  
        ZhuangHuan = "and"
        
    Case "備註"
  
        ZhuangHuan = "status"
  
    Case "或"
  
        ZhuangHuan = "or"
  
   
  
    End Select
  
End Function
  下面是我們這個窗體中一些需要我們在優化的時候需要注意的事情,像我們在按日期查詢的時候,我們的格式必須正確,如果不按正確的格式就會報錯。這就需要下面的程式碼來給我們增加提示:
                          '判斷日期和時間的格式是否正確
    If combfiled(0).Text = "上機日期" Or combfiled(0).Text = "上機時間" Or combfiled(0).Text = "下機日期" Or combfiled(0).Text = "下機時間" Then
        If Not IsDate(txtcontent(0).Text) Then
            MsgBox "請輸入正確的日期或時間格式", vbOKOnly + vbExclamation, "提示"
                Exit Sub
            End If
        End If
        
    If combfiled(1).Text = "上機日期" Or combfiled(1).Text = "上機時間" Or combfiled(1).Text = "下機日期" Or combfiled(1).Text = "下機時間" Then
    If Not IsDate(txtcontent(1).Text) Then
        MsgBox "請輸入正確的日期或時間格式", vbOKOnly + vbExclamation, "提示"
            Exit Sub
        End If
    End If
  
If combfiled(2).Text = "上機日期" Or combfiled(2).Text = "上機時間" Or combfiled(2).Text = "下機日期" Or combfiled(2).Text = "下機時間" Then
    If Not IsDate(txtcontent(2).Text) Then
        MsgBox "請輸入正確的日期或時間格式", vbOKOnly + vbExclamation, "提示"
            Exit Sub
        End If
    End If
    
  這還有一個很重要的問題值得我們瞭解:就是當我們查詢卡號的時候當我們輸入的內容是一位數的時候,我們總是能查出我們需要的正確的結果,但是當我們輸入多位數的時候就會出錯了,比如下面這種情況:

     當我們查詢的條件是小於3的時候,像12  24等第一位小於3的所有數都會出現:出現這種問題的原因是:卡號是字元型的資料,在比較的時候比的是ASCII碼的的大小,並且只要有好符合條件的數字就不會再往後比較。其餘的就是一些很小的問題,需要我們自己細心的修改。 

   小結:

         其實當我們有了學生中的那個基礎,到這我們就可以用一句話來概括,就是字串 的拼接,之中出現的錯誤沒有什麼難的邏輯錯誤,都是我們的SQL語句出現錯誤,只有我們有足夠的耐心和細心,我們會很輕鬆的搞定這個問題。