[摘 要] 本文通過(guò)對(duì)人事管理系統(tǒng)中自定義查詢?cè)淼姆治觯敿?xì)介紹了一種對(duì)所有字段可任意指定其條件,并可任意控制顯示的字段及其順序,實(shí)現(xiàn)動(dòng)態(tài)查詢的方法。
[關(guān)鍵詞] 數(shù)據(jù)庫(kù) 多條件 動(dòng)態(tài)SQL查詢
在數(shù)據(jù)庫(kù)管理系統(tǒng)中查詢不可缺少,現(xiàn)有的面向用戶的查詢系統(tǒng)大多是建立在固定的SQL查詢語(yǔ)句上,查詢時(shí)根據(jù)用戶給定的值進(jìn)行查詢,實(shí)現(xiàn)比較簡(jiǎn)單。但用戶的要求往往是多種多樣的,當(dāng)用戶提出的查詢要求需要多基本表連接時(shí),就需要用戶事先指定連接關(guān)系;而有時(shí)應(yīng)用系統(tǒng)需求查詢條件是動(dòng)態(tài)的,由用戶來(lái)實(shí)現(xiàn)相對(duì)較難。為此本文通過(guò)探討其設(shè)計(jì)原理與實(shí)現(xiàn)過(guò)程,對(duì)學(xué)校人事管理系統(tǒng)中的自定義查詢功能進(jìn)行分析,提出了一種能根據(jù)用戶需求,可任意控制顯示的字段及其順序,并可對(duì)所有字段任意指定條件,動(dòng)態(tài)生成SQL查詢語(yǔ)句,從而實(shí)現(xiàn)數(shù)據(jù)庫(kù)動(dòng)態(tài)查詢的方法。
一、原理分析
1.設(shè)計(jì)原理
在查詢過(guò)程中普通用戶通常對(duì)于SQL語(yǔ)法比較陌生,基于這一點(diǎn),我們將用戶查詢需求和SQL的生成分離開(kāi)來(lái),對(duì)于一般不熟悉數(shù)據(jù)庫(kù)語(yǔ)言的用戶更可讓其集中注意力提出查詢需求,而由系統(tǒng)去完成用戶需求與SQL語(yǔ)句相應(yīng)的轉(zhuǎn)換。用戶只需對(duì)用戶表達(dá)式進(jìn)行操作,無(wú)需與數(shù)據(jù)庫(kù)打交道,由系統(tǒng)建立用戶表達(dá)與數(shù)據(jù)庫(kù)查詢語(yǔ)句之間的聯(lián)系,對(duì)用戶的查詢需求進(jìn)行轉(zhuǎn)換,動(dòng)態(tài)生成可執(zhí)行的標(biāo)準(zhǔn)SQL語(yǔ)句,并完成查詢操作。
在動(dòng)態(tài)查詢程序設(shè)計(jì)過(guò)程中需要考慮其實(shí)用性,友好性,完備性。因此,在動(dòng)態(tài)查詢的設(shè)計(jì)時(shí)使用“與”、“或”、“非”3種邏輯關(guān)系可以將查詢條件進(jìn)行組合;使用括號(hào)可以改變邏輯關(guān)系之間的優(yōu)先關(guān)系;另外我們還使用“包含”,“=”等6種比較符,只要進(jìn)行合理的條件組合就能查出符合條件的記錄。
2.實(shí)現(xiàn)過(guò)程
(1)輸入查詢條件。查詢條件包括查詢字段、比較符和字段內(nèi)容。
(2)生成條件。當(dāng)用戶輸入完查詢條件時(shí)點(diǎn)擊按鈕使查詢條件顯示在查詢條件顯示欄中,同時(shí)查詢條件也寫(xiě)入用于查詢的字符串中。
(3)顯示查詢條件。在一個(gè)列表顯示框中直接顯示用戶輸入的復(fù)合查詢條件。使用列表框的好處是如果查詢條件已滿,則激活右邊的滾動(dòng)塊顯示更多的查詢條件。
(4)加入條件關(guān)系。用戶如果想執(zhí)行多條件查詢,條件之間可以用“與”“或”“非”等邏輯關(guān)系連接,還可以使用括號(hào)將條件進(jìn)行組合。
(5)查詢操作。激活顯示結(jié)果窗口時(shí),執(zhí)行生成的SQL語(yǔ)句,將結(jié)果置于DBgrid數(shù)據(jù)庫(kù)表格中。
二、案例實(shí)現(xiàn)
1.查詢窗口設(shè)計(jì)
為了實(shí)現(xiàn)交互操作的靈活方便,定義frm_sql和frm_exe 窗口對(duì)象,分別用于生成動(dòng)態(tài)SQL 查詢語(yǔ)句,窗口界面設(shè)計(jì)如下圖。顯示查詢執(zhí)行結(jié)果的窗體主要由一個(gè)DBgrid_sql數(shù)據(jù)庫(kù)表格組成,這里從略。
圖中主要控件及說(shuō)明如下:
Cmb_yh為下拉列表框,功能為實(shí)現(xiàn)多條件間的“與”或“或”;Edt_va文本框功能為輸入查詢條件值;Btn_tj_add按鈕功能為添加查詢條件;Che_Lst_sql復(fù)選列表框功能為設(shè)置查詢、顯示字段; Btn_od_ad按鈕功能為添加排序依據(jù);Btn_display按鈕功能為執(zhí)行動(dòng)態(tài)生成的SQL 查詢語(yǔ)句,并激活顯示查詢結(jié)果窗口。
2.具體實(shí)現(xiàn)過(guò)程
程序的算法主要是變量tj、lb、px、sql是由窗體輸入的值產(chǎn)生的。變量說(shuō)明如下:
tj用來(lái)存儲(chǔ)動(dòng)態(tài)生成的查詢條件;lb用來(lái)存儲(chǔ)查詢字段列表;px用來(lái)存儲(chǔ)生成的查詢結(jié)果排序依據(jù)子句;sql用來(lái)存儲(chǔ)SQL 查詢語(yǔ)句字符串,即“select”+lb+tj+px,如圖所示則sql為:“select dw, ks (此處多個(gè)字段略) where (zc=‘講師’) and (xl=’本科’)and (dw like ‘%機(jī)電%’) order by csrq”。
在Btn_display顯示按鈕中激活顯示結(jié)果窗口,執(zhí)行生成的SQL 語(yǔ)句,并將結(jié)果記錄集置于DBgrid_sql數(shù)據(jù)庫(kù)表格控件中。
三、結(jié)束語(yǔ)
本程序通過(guò)簡(jiǎn)單的窗口界面點(diǎn)擊,生成多條件自由組合、顯示字段及順序任意定義的、動(dòng)態(tài)SQL查詢語(yǔ)句,從而實(shí)現(xiàn)動(dòng)態(tài)查詢,極大地簡(jiǎn)化了查詢操作、提高了查詢的靈活性,使用戶把注意力更多集中在查詢條件的設(shè)計(jì)上。用戶也可根據(jù)需求,方便地將本程序思想移植到其他語(yǔ)言或其他的查詢應(yīng)用系統(tǒng)中。
參考文獻(xiàn):
[1]魏永山:數(shù)據(jù)庫(kù)關(guān)聯(lián)查詢界面的設(shè)計(jì)與實(shí)現(xiàn).山東科技大學(xué)學(xué)報(bào)(自然科學(xué)版), 第21卷第3期:34~36
[2]穆彤娜 于洪敏 張鐵成:數(shù)據(jù)庫(kù)系統(tǒng)綜合查詢方法研究.中國(guó)礦業(yè)大學(xué)學(xué)報(bào),第35卷第2期:260~264