【摘 要】目前數(shù)據(jù)庫技術(shù)業(yè)已成為計(jì)算機(jī)應(yīng)用的關(guān)鍵核心技術(shù),數(shù)據(jù)庫已成為其核心和基礎(chǔ)。建立數(shù)據(jù)庫應(yīng)用系統(tǒng)是要充分利用數(shù)據(jù)庫中的數(shù)據(jù)。對(duì)數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行的操作除添加(Insert)、更改(update)和刪除(delete)外,最常用,也是重要的是查詢操作。即便是最簡單的數(shù)據(jù)庫應(yīng)用系統(tǒng),也離不開查詢功能,查詢可以說是進(jìn)行數(shù)據(jù)管理的重要手段。
【關(guān)鍵詞】計(jì)算機(jī);信息;查找
智能化的數(shù)據(jù)窗口對(duì)象是其精華所在。利用此對(duì)象可以操作關(guān)系數(shù)據(jù)庫的數(shù)據(jù)而無需寫入SQL語句,即可以直接檢索、更新和用多種形式表現(xiàn)數(shù)據(jù)源中的數(shù)據(jù)。但要注意,必須使數(shù)據(jù)窗口成為窗口(Window)下數(shù)據(jù)窗口控制的一個(gè)連接對(duì)象,數(shù)據(jù)窗口才能使用戶在應(yīng)用執(zhí)行期間訪問數(shù)據(jù)庫中的數(shù)據(jù)。
一、綜合信息的查找
目前,隨著工具軟件的發(fā)展和廣泛采用,使數(shù)據(jù)庫應(yīng)用系統(tǒng)的開發(fā)如虎添翼,其中PowerBuilder以其獨(dú)特的數(shù)據(jù)窗口(DataWindow)倍受歡迎。利用PowerBuilder提供的內(nèi)部查詢機(jī)制,我們即可以讓數(shù)據(jù)窗口作為查詢條件的輸入,又可以讓該數(shù)據(jù)窗口作為查詢結(jié)果的輸出,這樣就可以使數(shù)據(jù)窗口中的所有數(shù)據(jù)項(xiàng)進(jìn)行自由組合的查詢。例如:在窗口W_que上建立兩個(gè)數(shù)據(jù)窗口控制dw_1和dw_2,分別連接兩個(gè)數(shù)據(jù)窗口對(duì)象dw_que1與dw_que2,其中dw_1用于輸入查詢條件,而dw_2用于顯示滿足查詢條件的所有元組。事實(shí)上條件的輸入及元組的顯示完全可以在一個(gè)數(shù)據(jù)窗口中實(shí)現(xiàn),考慮到這兩種操作的差別(例:條件輸入可編輯,而元組顯示不可編輯;條件輸入可為某一范圍,而元組顯示僅為滿足條件的所有紀(jì)錄……)將其用兩個(gè)數(shù)據(jù)窗口控制來實(shí)現(xiàn)。這就要求dw_2與dw_1數(shù)據(jù)共享,即要求dw_que1與dw_que2兩數(shù)據(jù)窗口的數(shù)據(jù)源完全相同。用這種方法實(shí)現(xiàn)查詢優(yōu)點(diǎn)突出,例:通過設(shè)置數(shù)據(jù)窗口中對(duì)應(yīng)列的編輯風(fēng)格(Edit Styles)為相應(yīng)的下拉式數(shù)據(jù)窗口(Drop
-DownDataWindow),使顯示的元組文字化。注意,這要事先建好下拉式數(shù)據(jù)窗口。設(shè)置數(shù)據(jù)窗口中對(duì)應(yīng)列的編輯風(fēng)格同樣可滿足其它顯示需要。利用數(shù)據(jù)窗口的風(fēng)格特點(diǎn):查詢表的列寬、列序可自由改變,甚至可以覆蓋掉一些列,以達(dá)到更滿足查詢顯示的需要。綜合查詢的信息來自多個(gè)表,改變數(shù)據(jù)窗口的數(shù)據(jù)源,采用多表連接的數(shù)據(jù)源即可實(shí)現(xiàn)。但是如我們問題的描述,如果我們需要的查詢項(xiàng)隨機(jī)地來自這43張表中的數(shù)據(jù)項(xiàng),顯示項(xiàng)也是隨機(jī)地。這種任意條件的組合,可選輸出項(xiàng)的顯示稱為動(dòng)態(tài)查詢(Dynamic Query)依然采用上述方法,數(shù)據(jù)窗口dw_que1與dw_que2的數(shù)據(jù)源將是這43張表的連接,先不說效率問題,單從這426個(gè)項(xiàng)中輸入查詢條件,又顯示這426個(gè)項(xiàng),就使人敬而遠(yuǎn)之。
二、計(jì)算機(jī)動(dòng)態(tài)查找的實(shí)現(xiàn)
在某些實(shí)際的應(yīng)用系統(tǒng)開發(fā)中,由于用戶在開發(fā)前提不出查詢的需求,而在系統(tǒng)運(yùn)行中希望能夠?qū)λ械臄?shù)據(jù)項(xiàng)任意組合進(jìn)行查詢,以滿足來自多方的需求,實(shí)現(xiàn)動(dòng)態(tài)地查詢(即隨機(jī)地從43張表中選擇數(shù)據(jù)項(xiàng)進(jìn)行組合作為查詢條件并任意地選擇數(shù)據(jù)項(xiàng)作為顯示條目)。對(duì)于此類查詢的實(shí)現(xiàn)要利用Power
-Builder通過編程的方式在運(yùn)行時(shí)動(dòng)態(tài)地創(chuàng)建數(shù)據(jù)窗口,并動(dòng)態(tài)地控制數(shù)據(jù)窗口。動(dòng)態(tài)地創(chuàng)建一個(gè)數(shù)據(jù)窗口,應(yīng)用程序需要執(zhí)行下列任務(wù):一是動(dòng)態(tài)地構(gòu)造SQL語句;二是用符合數(shù)據(jù)窗口語法的字符串,為現(xiàn)在的數(shù)據(jù)窗口控制創(chuàng)建一個(gè)數(shù)據(jù)窗口對(duì)象。具體實(shí)現(xiàn)如下:(1)動(dòng)態(tài)地生成SQL語句,根據(jù)SQL的語法:SELECT stringa FROM stringb WHERE stringc,也就是動(dòng)態(tài)地生成stringa,stringb,stringc。由用戶輸入要顯示的列,一旦輸入完畢,列名就隨之確定,將所有列名拼成一個(gè)“串”,中間用“,”分隔,形如“columm1,column2,column3,…,columnr”,則動(dòng)態(tài)地生成stringa;同樣由用戶輸入查詢條件,包括相應(yīng)的列、滿足的條件或范圍、邏輯關(guān)系等,將這些條件拚成一個(gè)串,即為stringc,顯然,所有的列名都確定了,他們所在的表名也確定了,按照stringb的語法規(guī)則即可構(gòu)造。(2)在現(xiàn)在的事物對(duì)象里利用相關(guān)的SyntaxFromSQL()函數(shù)生成符合數(shù)據(jù)窗口語法的字符串:exp=syntaxfromsq1(sq1ca,str,strsty,error)生成數(shù)據(jù)窗口的源代碼。其中,strsty為數(shù)據(jù)窗口的顯示風(fēng)格,例:strsty=“style(type=grid)datawindow(units=lcolor=12632256)text(font.face
='system')”。(3)創(chuàng)建數(shù)據(jù)窗口對(duì)象。dw_que.create(exp)。這樣就實(shí)現(xiàn)了用戶要求的隨機(jī)查詢。根據(jù)數(shù)據(jù)窗口的動(dòng)態(tài)特性,對(duì)于那些運(yùn)行時(shí)才能確定的數(shù)據(jù)窗口采用動(dòng)態(tài)方式創(chuàng)建,使應(yīng)用程序能更靈活地滿足用戶的需求。
總之,將查詢條件的輸入實(shí)現(xiàn)多級(jí)菜單選擇將查詢結(jié)果文字化,使復(fù)雜查詢問題解決得更完善。動(dòng)態(tài)查詢的方法,不僅能應(yīng)用于人事管理信息系統(tǒng),同時(shí)也是解決其他需要復(fù)雜查詢的數(shù)據(jù)庫應(yīng)用系統(tǒng)的途徑。這種動(dòng)態(tài)查詢方法的在數(shù)據(jù)庫應(yīng)用系統(tǒng)的使用,避免了應(yīng)用系統(tǒng)開發(fā)中開發(fā)者冥思苦想所有可能的查詢條件,而系統(tǒng)運(yùn)行中用戶總遇到有些查詢要求無法滿足的矛盾。動(dòng)態(tài)查詢的實(shí)現(xiàn),縮短了開發(fā)周期,減少了產(chǎn)品維護(hù)的工作。