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