還沒到組合查詢的時候就聽到了說組合查詢特別難,一開始的時候自己也就想的特別難,一直拖著沒去做,真到不得不去做的時候,才發現理清楚思路一切問題就迎刃而解了,所以不應該去懼怕困難,遇見困難的時候正是自己在提高的時候,只有多遇見困難,才會有更多的成長。
組合查詢**於簡單查詢,依舊是老套路,先判斷控制項框是否為空,然後查詢賦值,有區別的是分了三層,第一層是第一行要查詢的內容,第二三層要通過組合關係判斷是否到第二層和第三層,第二層判斷一行和二行。第三層判斷了所有查詢內容。還有些小細節是需要考慮的,比如姓名,性別,只能選擇<>,=。如果不去限制也是沒有問題的。
開始不明白欄位名裡是漢字,怎麼把資料庫表示出來,後來看了看別人的部落格才明白了。定義了乙個函式**如下。
`
public
function filed(a as
string) as
string
select
case a
case
"卡號"
filed = "cardno"
case
"學號"
filed = "studentno"
case
"姓名"
filed = "studentname"
case
"性別"
filed = "***"
case
"系別"
filed = "department"
case
"年級"
filed = "grade"
case
"班級"
filed = "class"
case
"與"
filed = "and"
case
"或"
filed= "or"
endselect
endfunction `
private
sub cmdiquiry_click()
dim txtsql as
string
dim msgtext as
string
dim mrc as adodb.recordset
txtsql = "select * from student_info where"
'判斷第一層查詢是否為空
if combo1(0).text = ""
or combo1(1).text = ""
or txtiquiry1.text = ""
then
msgbox "條件沒有填寫完!", vbexclamation, "警告"
exit
subelse
txtsql = txtsql & " " & filed(combo1(0).text) & " " & combo1(1).text & "'" & trim(txtiquiry1.text) & "'"
set mrc = executesql(txtsql, msgtext)
'組合關係第乙個不為空進行二層查詢
if combo4(0).text
<> ""
then
if combo1(0).text = ""
or combo1(1).text = ""
or trim(txtiquiry1.text) = "" _
or combo2(0).text = ""
or combo2(1).text = ""
or trim(txtinquiry2.text) = ""
then
msgbox "第二行條件沒有填寫完!", vbexclamation, "警告"
exit
subelse
txtsql = txtsql & filed(trim(combo4(0).text)) & " " & filed(trim(combo2(0).text)) & " " & (trim(combo2(1).text)) & "'" & (txtinquiry2.text) & "'"
set mrc = executesql(txtsql, msgtext)
endif'第二個組合關係不為空進行第三層查詢
if combo4(1).text
<> ""
then
if filed(combo1(0).text) = ""
or combo1(1).text = ""
or trim(txtiquiry1.text) = ""
or _
combo2(0).text = ""
or combo2(1).text = ""
or trim(txtinquiry2.text) = ""
or _
filed(combo3(0).text) = ""
or combo3(1).text = ""
or trim(txtinquiry3.text) = ""
then
msgbox "第三行條件沒有填寫完!", vbexclamation, "警告"
exit
subelse
'三層關係4中
txtsql = txtsql & filed(trim(combo4(1).text)) & " " & filed(trim(combo3(0).text)) & " " & (trim(combo3(1).text)) & " '" & txtinquiry3.text & "'"
set mrc = executesql(txtsql, msgtext)
if mrc.eof then
msgbox "沒有資料請重新輸入", vbexclamation, "警告"
exit
subend
ifend
ifend
ifend
ifend
if
心得:很多地方一直想想不透,可以休息會在想,或者問問小夥伴們,很多感覺困難的地方只是自己理解錯誤了,當自己思考理解不了的時候一定要去問問別人。遇見困難,就是在成長的時候。
組合查詢優化後(以操作員工作記錄為例):
學生基本資訊裡沒有以日期格式和時間格式為查詢的,那麼學生上機統計資訊,和操作員工作記錄都有這種格式的,那麼我們要怎麼做才能使查詢的內容日期控制項和文字控制項一起互動用呢?
private
sub combofield1_click()
這是我以前的方法:
' if combofield3.text = "註冊日期" or combofield3.text = "登出日期" then
' msgbox "日期查詢格式為 「yyyy-mm-dd」"
' end if
' if combofield3.text = "註冊時間" or combofield3.text = "登出時間" then
' msgbox "時間查詢格式為 「hh:mm:ss」"
' end if
更改後的:
if combofield1.text = "註冊日期"
or combofield1.text = "登出日期"
then
'與資料庫中的日期格式相符合
dtpicker1.format = dtpcustom
dtpicker1.customformat = format("yyyy-mm-dd")
dtpicker1.visible = true
txtcontent1.visible = false
else
if combofield1.text = "註冊時間"
or combofield1.text = "登出時間"
then
dtpicker1.format = dtptime
dtpicker1.value = false
txtcontent1.visible = true
else
dtpicker1.visible = false
txtcontent1.visible = true
endif
endif
endsub
endsub
機房收費系統 組合查詢
機房收費系統在磕磕絆絆中過來了,這期間遇到問題,解決問題,最後收穫的特別多,在敲得過程中,不斷的學習新知識,應該說組合查詢是收費系統的乙個小難點了吧,起初我是真的不知道該從 下手,總是有種剪不斷理還亂的感覺,分析分析就繞進去了,我總是把問題想的很複雜,其實只要一句 語句,一切都解決了,根本用不到好多...
機房收費系統 組合查詢
關於組合查詢,真的是乙個令人頭疼的東西,但是當自己突然間的做出來時,卻莫名的有種貌似又不是很難得感覺。昨天弄了整整一下午,今天的下午終於在除錯了兩個小時做出來了。首先是查到了一些關於組合查詢的部落格,有乙個共同的特點就是都要獲得使用者所選的欄位名並轉化成資料庫表中的欄位名,這樣實現了人機共同語言的轉...
機房收費系統 組合查詢
組合查詢真的讓我研究了很長時間,從開始沒有什麼思路到閱讀大量的部落格,之後形成自己的 之後一步步的優化,終於成就了乙個自己認為還可以的 若有好的建議歡迎指出,下面是要實現的功能介面 定義變數 dim txtsql as string dim msgtext as string dim mrc as ...