楊明遠 金喜波 刁樹民 張曉勇
摘要:本文研究了數據庫PowerBuilder如何實現動態(tài)查詢,并以汽配管理系統(tǒng)為例,探討動態(tài)查詢在汽配管理系統(tǒng)中的制作和實現。詳細介紹了數據表及字段的選擇、兩個字符型變量和WHERE 子句的生成、數據表間的關聯和關系二維表的設計及創(chuàng)建、Datawindow的生成并引入兩個重要函數。
關鍵詞:實現 動態(tài)查詢 PowerBuilder
中圖分類號:TP311.132 文獻標識碼:A
0 引言
PowerBuilder是現今最為流行的數據庫前端開發(fā)工具。掌握PowerBuilder開發(fā)工具固然重要,但運用開發(fā)工具開發(fā)一個有效的、易維護的、易升級的、功能強大的管理系統(tǒng)尤為重要。本文利用PowerBuilder開發(fā)工具應用在汽配管理系統(tǒng)為例,探討了汽配管理系統(tǒng)的制作方法,著重研究了動態(tài)查詢在汽配管理系統(tǒng)中的實現方式,延伸了Powerbuilder開發(fā)工具實用性。
1 汽配管理系統(tǒng)的系統(tǒng)分析
本系統(tǒng)是面向汽車配件銷售管理的管理信息系統(tǒng)。該系統(tǒng)能對汽車配件行業(yè)進行進貨、銷售、存儲的有效管理,且能集中管理汽車配件的應收應付帳,并能實現查詢分析統(tǒng)計等功能,及時響應企業(yè)汽車配件進銷的快速查詢和分析,使企業(yè)經營運作物流清晰,經營狀況一目了然。汽配管理系統(tǒng)數據表結構及表間關系詳見圖1。
2 動態(tài)查詢的實現
在PowerBuilder中,動態(tài)查詢的實現歸根結底就是在應用程序中完成一個Datawindow的制作,而可通過SQL語句的轉換得來[1]。因此,如何生成SQL語句就成了問題的關鍵。
分析SQL的SELECT語句:
Select數據表.字段名from數據表
……………第一部分
Where表間關聯條件and查詢條件
………………第二部分
從上述分析可以看出:SQL語句是有數據表及其字段、Where子句與表間關聯等幾部分組成的。尋找和利用其特點,就有可能實現動態(tài)查詢。
2.1 數據表及字段的選擇 數據表及字段的選擇是指選擇數據庫中具體的數據表及所需查詢的表字段,完成SQL語句的第一部分制作。在汽配管理系統(tǒng)中,供用戶查詢的數據表有8個,其中每個數據表擁有多個字段。為方便用戶的選擇,采用列表選擇的方法,分別用兩個列表顯示數據表及其字段。當用戶通過第一個列表選擇數據表時,在第二個列表中顯示出第一個列表所選擇的數據表的所有字段。在第二個列表中,雙擊所需的字段名。這樣的操作就選定了數據表及字段。實現上述選擇的關鍵是:在汽配管理系統(tǒng)中的動態(tài)查詢模塊里,定義了兩個字符型實例變量:LS-database[ ]及LS-field,分別容納所選定的數據表名及字段名字符串[2]。在字段列表框雙擊事件中,又定義了兩個字符型局部變量:Se-database及Se-field分別容納雙擊后選定的數據表名和字段名。其實現流程圖詳見圖2。
從圖2可知,數組LS-database[ ]及LS-field中存儲的內容,便是選定的數據表和字段名。
2.2 WHERE子句的生成 SQL語句的第二部分是Where子句。該子句是SQL語句的一個關鍵部分,用戶正是通過它來滿足檢索的要求。Where子句是有邏輯關系符、檢索字段名、檢索操作符及檢索值組成。其中邏輯關系符是指在Where子句間的“或者”和“并且”的關系。檢索字段名是指用戶提出檢索要求的字段名。檢索值是指對檢索字段提出的要求。檢索操作符是指檢索字段與檢索值之間的關系。Where子句的四個組成部分分別由三個下拉列表和一個單行編輯構成,其中檢索字段下拉列表項由數據表及字段選擇中選擇出來的字段名組成。Where子句實現思路:通過循環(huán)算法,把多個Where子句的四個組成部分組合起來,形成條件查詢子句。
2.3 數據表間的關聯 在前兩節(jié)的基礎上即可順利地選擇出與字段,并生成Where子句及SQL語句。這時,制作并未完成。因為數據表間關聯這個關鍵部分還沒有解決。在Datawindow的人機交互制作過程中,表間關聯可自動生成。但在應用程序里,生成Datawindow的過程必須通過應用程序設計編制才能實現[3]。表間關聯的基本思路是:在PowerBuilder的數據庫中,表間的關聯是固定的,表與表之間的關聯情況可以看成為一個二維表的關系。因此,在系統(tǒng)中設計了關系表查詢方案,以解決數據表間的關聯問題。所謂關系表,是指一個能反映任意兩個表相聯關系的二維表格。若兩個表相關聯,則在二維表格交叉欄內填入關聯字段。若兩個表不關聯,則在二維表格交叉欄內填入空格。建立好關系表后,根據在數據表與表字段選擇中所選擇的數據表名(存儲在數組LS-database[ ]中),在關系表中,兩兩查詢關系。若兩表關聯,根據交叉項中所得的關系在Where子句中填入相應的語句即可完成。
2.4 Datawindow的生成 在表間關聯子句生成后,SQL語句的制作便完成了。但如何將SQL語句轉換成Datawindow呢?這里需要引進兩個函數:SyntaxfromSQL()和Create():
函數SyntaxfromSQL()用于產生一個Datawindow,它擁有三個參數:第一個參數是用于傳遞SQL語句(即在2.2中所生成的SQL語句);第二個參數用來表示Datawindow的風格;第三個參數是在Datawindow生成過程中出錯時保存錯誤信息。
函數Create(),使用從函數SyntaxfromSQL()中返回的屬性信息,在運行狀態(tài)下建立一個Datawindow。它有兩個參數:第一個參數即是從SyntaxfromSQL()函數中返回的字符串變量。第二個參數用在出錯時存儲出錯信息。
在系統(tǒng)中的具體實現代碼如下:
String sq1-statement,present,error,answer
SQL-statement=……
//SQL-statement中存儲著SQL描述語句
Present =”Style(type=grid)”
// Present 中存儲著Datawindow風格等屬性
answer=sqlca. SyntaxfromSQL()(SQL- statement, present,error)//產生Datawindow
Dw-1. Create(answer, error)//建立Datawindow
至此完成了動態(tài)查詢的全部制作,實現了在PowerBuilder中動態(tài)查詢。
3 結束語
通過以上建立的對數據表及字段的選擇,把多個Where子句的四個組成部分組合起來表與表之間的關聯看成了一個二維表的關系,運用函數SyntaxfromSQL()和函數Create()生成Datawindow,實現了在PowerBuilder中動態(tài)查詢。
參考文獻:
[1]崔巍.PowerBuilder8.0數據庫應用系統(tǒng)開發(fā)教程[M].北京:清華大學出版社.2003.1:105-109.
[2]何軍.PowerScript語言·事件·函數[M].北京:電子工業(yè)出版社.2003.6:255-258.
[3]趙君等.利用重用查詢計劃實現數據庫性能的優(yōu)化[J].長春:吉林大學學報.003.4:81-83.