机房系统(九)——【组合查询】
生活随笔
收集整理的這篇文章主要介紹了
机房系统(九)——【组合查询】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
? ? 機房收費系統首次讓小編接觸到了“組合查詢”。到現在為止,“組合查詢”的類型,大概接觸到了兩種方式,一是單一表多個字段連接的查詢;二是多個表的連接查詢。機房收費系統中,組合查詢占了很大的比重,在做這部分的內容時,也是遇到了不少的問題。
一、組合框列表中字段都是數據庫中相應字段的中文名字,直接加載,數據庫能查詢到相應數據嗎?
答案是否定的。那么,如何才能讓數據庫認識這些中文字段呢?這就需要一個轉化的過程了。如下: Public Function FiledName(a As String) As StringSelect Case aCase "卡號"FiledName = "cardno"Case "姓名"FiledName = "studentNo"Case "上機日期"FiledName = "ondate"Case "上機時間"FiledName = "ontime"Case "下機日期"FiledName = "offdate"End Select End Function
當我們在查詢下拉列表中的字段時,在查詢語句中用上述相應的轉化就可以查到我們需要的數據了,這也就是一個等價轉化的過程。
二、這么多重復的字段,在敲代碼時,復制粘貼可以嗎?
答案是否定的。雖然能得到想要的效果,但是出現很多同樣的代碼片段就會造成代碼冗余了。我們要在能實現基本功能的時候,考慮到系統的性能。相同內容的添加,我們只要用控件組,用循環就很好的解決了代碼冗余問題。如下: For Index = 0 To 2With combol(Index).AddItem "卡號".AddItem "姓名".AddItem "上機日期".AddItem "上機時間".AddItem "下機日期".AddItem "下機時間".AddItem "消費金額".AddItem "余額"End WithNext i
三、組合查詢窗體中會涉及到時間日期問題,需要用戶自己填寫嗎?
答案是也不是。為什么這么說呢。是需要用戶選擇時間日期,有特定的格式;不是需要用戶自己隨心所欲,想用什么格式就用什么格式,或者根據提示填寫符合格式要求的時間日期,這都會給用戶增加操作量。所以我們在選擇日期字段時,如果填寫信息的文本框變成日期控件,讓用戶選擇時間日期,不就會給使用者提供很多方便了嘛?這要怎么實現呢?如下: If combol(i).Text = "上機日期" Or combol(i).Text = "下機日期" ThenDTPicker1(i).Visible = TrueDTPicker1(i).Format = dtpShortDatetxt1(i).Text = DTPicker1(i).ValueEnd IfIf combol(i).Text = "上機時間" Or combol(i).Text = "下機時間" ThenDTPicker1(i).Visible = TrueDTPicker1(i).Format = dtpTimetxt1(i).Text = DTPicker1(i).ValueEnd If
四、所有字段的操作符都需要“=”、“<”、“>”、“<>” 這四個嗎?
答案是否定的。在選擇條件判斷時,是否需要這四個操作符同時存在,是和用戶選擇的字段有關系的。操作符與字段的匹配要符合實際的邏輯。比如我們的性別選擇,只有是或者不是,不會存在大于或者小于的情況。再比如系別或者姓名,也是存在是與不是兩種情況。而時間日期的選擇,這四個操作符是都需要存在的。所以,當用戶選擇字段后,后面緊跟著操作符就要符合該字段的邏輯。在選擇列表框的單擊事件里,使用下面的判斷便可以實現。 If combol(Index).Text = "姓名" ThenSymbol(Index).ClearSymbol(Index).AddItem "="Symbol(Index).AddItem "<>"ElseSymbol(Index).ClearSymbol(Index).AddItem "="Symbol(Index).AddItem ">"Symbol(Index).AddItem "<"Symbol(Index).AddItem "<>"End If
組合查詢
思路:查詢可以包括一個簡單的查詢(不使用組合關系)、使用一個組合關系、使用兩個組合關系。
重難點:查詢語句的書寫。小編使用的方式是先查詢某一個條件,當滿足這個條件時再進行下一個附加條件的查詢。簡單來說就是,滿足a=i的條件時,再進行a=a & 另一個條件,此時a便得到了最新的結果。 txtsql = "select * from Line_Info where"Rem 沒有組合關系,判斷第一行信息是否為空值If Trim(combol(0).Text = "") Or Trim(Symbol(0).Text = "") Or Trim(txt1(0).Text = "") ThenMsgBox "請將第一行信息填寫完整!", 48, "提示"Exit SubEnd If'查詢第一行信息txtsql = txtsql & " " & FiledName(combol(0).Text) & " " & Trim(Symbol(0).Text) & "'" & Trim(txt1(0).Text) & "'"Rem 一個組合關系,判斷第二行信息是否為空If Trim(Symbol(3).Text <> "") ThenIf Trim(combol(1).Text = "") Or Trim(Symbol(1).Text = "") Or Trim(txt1(1).Text = "") ThenMsgBox "請將第二行信息填寫完整!", 48, "提示"Exit SubElse '查詢第二行信息txtsql = txtsql & "" & CSymbol(Symbol(3).Text) & " " & FiledName(combol(1).Text) & " " & Trim(Symbol(1).Text) & " '" & Trim(txt1(1).Text) & "'"End IfEnd IfRem 兩個組合關系,判斷輸入框信息是否為空If Trim(Symbol(4).Text <> "") And Trim(Symbol(3).Text <> "") ThenIf Trim(combol(0).Text = "") Or Trim(Symbol(0).Text = "") Or Trim(txt1(0).Text = "") Or _Trim(combol(1).Text = "") Or Trim(Symbol(1).Text = "") Or Trim(txt1(1).Text = "") Or _Trim(combol(2).Text = "") Or Trim(Symbol(2).Text = "") Or Trim(txt1(2).Text = "") ThenMsgBox "請將所有輸入框信息填寫完整!", 48, "提示"Else '查詢第三行信息txtsql = txtsql & "" & CSymbol(Symbol(4).Text) & " " & FiledName(combol(2).Text) & " " & Trim(Symbol(2).Text) & " '" & Trim(txt1(2).Text) & "'"End IfEnd If
總結
以上是生活随笔為你收集整理的机房系统(九)——【组合查询】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机房系统(八)——【日期控件DTPick
- 下一篇: 机房系统(十)——【结账】