機房收費系統 組合查詢

2021-08-11 14:35:48 字數 3571 閱讀 7150

大家在學習機房的時候,都感覺組合查詢是個難點,不知道是聽別人說的,還是自己親身感受到!但是我感覺,組合查詢並沒有大家想象的那樣「高不可攀」,只要大家踮踮腳,我們都觸手可得!

其實大家在做學生資訊管理系統的時候,已經用了一段時間的sql語句了,但是可能是由於書上都是有原始碼的,所以沒有多加思考,並沒有考慮sql語句的意思,以至於現在在學機房的時候遇到了類似的問題(所以我們要學會邊學習邊思考,」學而不思則罔」嘛),現在我們來看一下學生收費系統中的sql查詢!~

上圖就是學生資訊管理系統中的成績查詢介面,我們可以清晰的看到,我完成查詢操作只需要簡單的幾步:

1. 前半部分的查詢語句(無查詢條件)

2. 格式判斷(控制項資料是否輸入)

3. 後半部分的查詢語句(根據控制項資訊新增查詢條件)

現在再看看我們的組合查詢窗體

它其實看似負責,但是和上邊基本類似,**如下:

if trim(combo1(0).text) = ""

or trim(combo2(0).text) = ""

or trim(text1(0).text) = ""

then

msgbox "請輸入完整的查詢條件", , "提示"

exit

subend

if'判斷控制項輸入內容是否為空

txtsql = "select * from line_info where "

txtsql = txtsql & trim(field(combo1(0).text)) & trim((combo2(0).text)) & "'" & trim(text1(0).text) & "'"

if trim(combo3.text

<> "") then

'第乙個組合關係存在

if trim(combo1(1).text) = ""

or trim(combo2(1).text = "") or trim(text1(1).text = "") then

msgbox "你已經選擇了第乙個組合關係,請輸入第二行查詢條件", , "提示"

exit

subelse

txtsql = txtsql & field(trim(combo3.text)) & " " & field(combo1(1).text) & combo2(1).text & "'" & trim(text1(1).text) & "'"

endif

endif

if trim(combo4.text

<> "") then

'第二個組合關係存在

if trim(combo1(2).text) = ""

or trim(combo2(2).text) = ""

or trim(text1(2).text) = ""

then

msgbox "你已經選擇了第二個組合關係,請輸入第三行查詢條件", , "提示"

exit

subelse

txtsql = txtsql & field(combo4.text) & " " & field(combo1(2).text) & combo2(2).text & "'" & trim(text1(2).text) & "'"

endif

endif

set mrc = executesql(txtsql, msgtext)

if mrc.eof = true

then

'檢查資訊是否存在,如果不存在給出提示並清空所有文字框

msgbox "沒有查詢到結果,可能會你輸入的資訊不存在,或者資訊矛盾"

exit

subend

if

邏輯是這樣的:

1. 判斷控制項輸入資訊是否為空

2. 選擇查詢**

3. sql語句的連線(注意細節)

4. 判斷查詢條件是否有組合關係

5. 將所有的組合關係連線在一起

6. 執行sql語句查詢

我們在查詢的時候,需要把控制項中選擇的欄位名或操作符轉換成資料庫能夠識別的列名或符號!我們可以定義乙個函式來來解決這個問題!**如下:

public

function field(i as

string) as

string

select

case i

case

"學號"

field = "studentno"

case

"姓名"

field = "studentname"

case

"卡號"

field = "cardno"

case

"金額"

field = "cash"

case

"系別"

field = "department"

case

"年級"

field = "grade"

case

"班級"

field = "class"

case

"性別"

field = "***"

case

"狀態"

field = "status"

case

"備註"

field = "explain"

case

"型別"

field = "type"

case

"日期"

field = "date"

case

"時間"

field = "time"

case

"或" field = "or "

case

"與" field = "and "

endselect

endfunction

還有值得我們去注意的幾點就是:

1. 在我們選擇像是「姓名」類似的欄位名時,可供選擇的操作符只能是「=」或是「<>」,所以我們在程式設計的時候,要把這個細節新增進去!

2. 我們在選擇有關時間欄位名的時候,我們可以需要把「想要查詢內容」下的控制項改為時間控制項,方便使用者,提高自己系統的使用者體驗,也能夠有效防止使用者輸入的時間格式出現問題!

3. 我們在沒有選擇組合查詢條件的時候,下一行的控制項應該是無法使用的,這樣更切合實際,提高我們系統的嚴謹性!

這樣我們的組合查詢就完成了,加上我們需要注意的一些小的細節,我們組合查詢的窗體就更見的嚴謹了!學習之前,「感覺」很難,但是完成之後,其實也就那麼回事!

用小時候我們經常說的一句話來說就是「困難像彈簧,你弱它就強!」所以我們要用知識武裝自己的頭腦,讓自己變的強大起來,從而能夠戰勝一切困難!加油!

機房收費系統 組合查詢

機房收費系統在磕磕絆絆中過來了,這期間遇到問題,解決問題,最後收穫的特別多,在敲得過程中,不斷的學習新知識,應該說組合查詢是收費系統的乙個小難點了吧,起初我是真的不知道該從 下手,總是有種剪不斷理還亂的感覺,分析分析就繞進去了,我總是把問題想的很複雜,其實只要一句 語句,一切都解決了,根本用不到好多...

機房收費系統 組合查詢

關於組合查詢,真的是乙個令人頭疼的東西,但是當自己突然間的做出來時,卻莫名的有種貌似又不是很難得感覺。昨天弄了整整一下午,今天的下午終於在除錯了兩個小時做出來了。首先是查到了一些關於組合查詢的部落格,有乙個共同的特點就是都要獲得使用者所選的欄位名並轉化成資料庫表中的欄位名,這樣實現了人機共同語言的轉...

機房收費系統 組合查詢

組合查詢真的讓我研究了很長時間,從開始沒有什麼思路到閱讀大量的部落格,之後形成自己的 之後一步步的優化,終於成就了乙個自己認為還可以的 若有好的建議歡迎指出,下面是要實現的功能介面 定義變數 dim txtsql as string dim msgtext as string dim mrc as ...