摘要:利用SQL-SELECT、參數化視圖和數據過濾器等方法設計并實現了查詢表單,并對三種設計方法進行了討論。
關鍵詞:VFP;查詢;表單設計
中圖分類號:TP311.1 文獻標識碼:A 文章編號:1009-3044(2009)36-10169-03
The Design and Implementation of Query Form Based on Visual FoxPro
SHANG Jun-ping, LIU He-bing
(Department of Computer Science technology, Henan Agricultural University, Zhengzhou 450002, China)
Abstract: This paper presents the design and implementation of query form in Visual FoxPro with the methods of SQL-SELECT, parametric view and data filter, and the methods are discussed.
Key words: VFP; query; form design
數據的查詢是數據處理中最基本的操作,幾乎每個應用程序都會涉及查詢的問題。在數據庫應用系統開發中,查詢表單的設計非常重要。本文以學生-課程-成績數據庫為例,利用SQL-SELECT、參數化視圖和數據過濾器等三種方法設計并實現了查詢表單。
1 表單設計
表單是數據處理的用戶界面,用戶通過各種表單來認識和使用數據處理應用軟件。在開發一個數據庫應用系統時,表單的設計是非常重要、不可缺少的一個環節。
表單設計的基本步驟:
1) 設置數據環境。分析表單是否涉及到數據表或視圖中的數據,根據需要在數據環境中添加數據表或視圖。數據環境及其中的表或視圖都是對象,可以對其進行屬性設置,數據環境的設置與表單一起保存。在運行表單時,VFP自動打開其數據環境中的表或視圖。
2) 設計表單界面:添加各類控件,設置各個對象的屬性,調整布局。
3) 編寫事件代碼:事件代碼設計是表單設計的關鍵。對某些對象,如命令按鈕等進行相關的事件設計,事件代碼在對象的事件觸發時自動執行。
2 數據源說明
本文以學生-課程-成績數據庫為數據源,數據庫中包括主要三個數據表,關系模式分別為:
Xuesheng(Xh,Xm,Xb,Csrq),字段分別表示學生的學號、姓名、性別和出生日期;
Kecheng(Kcdh,Kcm,Llxs,Syxs,Bxk,Xq,Kcbz),其中字段分別表示課程代號、課程名、理論學時、實驗學時、必修課、開課學期和課程備注;
Chengji(Xh,Kcdh,Cj),其中字段分別表示學號、課程代號和成績。
在Xuesheng與Chengji之間、Kecheng與Chengji之間建立一對多永久關系。
部分數據如圖1所示。
3 查詢表單設計
運行查表單詢,用戶可以通過交互方式,實現根據輸入查詢信息,得到相關信息。
本文設計如圖2所示的查詢表單,運行表單,用戶輸入學生姓名,點擊“查詢”按鈕查詢其選修課程及成績,結果顯示在表單上的表格中,點擊“退出”按鈕,釋放表單。
3.1 利用SQL-SELECT語句設計查詢表單
SELECT語句是SQL(Structured Query Language)語言的核心語句,提供對數據庫的查詢。SELECT語句使用方式靈活,功能豐富,不僅可以完成單表查詢,也可以完成復雜的連接查詢和嵌套查詢。
表單設計分析:利用SELECT語句設計圖2所示表單,設計界面如圖3所示,表單文件名設為F1。單擊“查詢”按鈕,根據文本框Text1中輸入的姓名進行查詢,查詢結果保存在臨時表T1中,要使查詢結果在Grid1中顯示,表格Grid1的數據源Recordsource應設定為臨時表T1。為避免表單初次運行表格Grid1中無數據出現空白表,在表單的Init事件中將表格的數據源進行初始化。
設計步驟如下:
1) 使用SELECT語句不需要打開要查詢的數據表,所以無需考慮數據環境。
2) 添加兩個標簽,將Label1的Caption屬性設為“基于VFP的查詢表單”,FontName為“楷體_GB2312”,FontSize為18,Label2的Caption屬性設為“請輸入姓名”,FontName為“楷體_GB2312”,FontSize為14。
3) 添加一個文本框Text1,用于運行時輸入要查詢的信息。
4) 添加兩個命令按鈕,Caption屬性分別設為“查詢”和“退出”,FontName為“楷體_GB2312”。
5) 添加表格Grid1,用于顯示查詢信息。
6) 調整各個對象大小和布局。
7) 表單事件代碼設計:
Form1的Init事件代碼:
SELECT Xuesheng.Xh,Xuesheng.Xm,Kecheng.Kcdh,Kecheng.Kcm,Chengji.Cj;
FROM Xuesheng,Kecheng,Chengji;
WHERE Xuesheng.Xh=Chengji.Xh AND Chengji.Kcdh=Kecheng.Kcdh ;
AND Xuesheng.Xm==\"\";
INTO CURSOR T1
Thisform.Grid1.Recordsource=\"T1\"
“查詢”按鈕的Click事件代碼:
SELECT Xuesheng.Xh,Xuesheng.Xm,Kecheng.Kcdh,Kecheng.Kcm,Chengji.Cj;
FROM Xuesheng,Kecheng,Chengji;
WHERE Xuesheng.Xh=Chengji.Xh AND Chengji.Kcdh=Kecheng.Kcdh ;
AND Xuesheng.Xm=Allt(Thisform.Text1.Value);
INTO CURSOR T1
Thisform.Grid1.Recordsource=\"T1\"
Thisform.Refresh
“退出”按鈕的Click事件代碼:
Thisform.Release
討論:由于SQL-SELECT語句功能強大,可以對單表、多表實現單條件查詢、多條件組合查詢的查詢功能,使用這種方法設計查詢表單。對于不同的數據源和查詢要求,可參照上例,多條件時增加輸入文本框(或使用組合框、選項按鈕組等),修改SELECT語句即可。
3.2 利用參數化視圖設計查詢表單
視圖是關系數據庫系統提供給用戶從多種角度觀察數據庫中數據的重要機制。視圖是從一個或者幾個基本表(或視圖)導出的表,它與基本表不同,是一個虛表。數據庫中只存放視圖的定義,而不存放視圖對應的數據,這些數據仍存放在原來的基本表中。在創建視圖時,可以創建參數化視圖,用它來限定視圖的作用范圍,避免每取一部分記錄就單獨創建一個視圖。
利用參數化視圖設計如圖2所示表單,設計界面如圖4所示,表單文件名設為F2。
設計步驟如下:
1) 打開學生-課程-成績數據庫,利用視圖設計器創建參數化視圖St1。將Xuesheng、Chengji與 Kecheng添加到視圖中,在字段選項卡選定Xuesheng.Xh,Xuesheng.Xm,Kecheng.Kcdh,Kecheng.Kcm,Chengji.Cj,在“篩選”選項卡中設置條件:Xuesheng.Xm=?xx,用“?xx”方式調用參數變量。這里,xx是變量名。參數化視圖St1的設計界面如圖5所示。
2) 將參數化視圖St1添加到查詢表單數據環境中,并將數據環境中的參數化視圖St1(Cursor1)的Nodataonload屬性設置為.t.。Nodataonload 屬性設為.t.,表單初始化時,打開視圖,但視圖不取得任何數據。這樣可以避免運行表單時參數化視圖彈出要求輸入參數變量的對話框。
3) 標簽、文本框、命令按鈕的添加和屬性設置同圖3表單F1的設計。
4) 把數據環境中的參數化視圖St1拖放到表單中,生成表格grdSt1。
5) 調整各個對象大小和布局。
6) 表單事件代碼設計:
Form1的Init事件代碼:
Local xx通過定義變量xx,實時改變視圖的參數變量。
“查詢”按鈕的Click事件代碼:
xx=Allt(Thisform.Text1.Value)通過文本框給參數變量賦值。
=requery(“St1”)當參數變量發生變化時可用ReQuery()函數刷新視圖。
Thisform.Refresh
“退出”按鈕的Click事件代碼:
Thisform.Release
討論:視圖從一個或者幾個基本表(或視圖)導出數據,同樣可以對單表、多表實現單條件查詢、多條件組合查詢。通過設計參數化視圖,當參數變量發生變化時刷新視圖,實現交互查詢。對于不同的數據源和查詢要求,參照上例,多條件時增加輸入文本框(或使用組合框、選項按鈕組等),修改參數化視圖的設計即可。在設計時需要根據參數的個數、名稱在表單的Init事件中設置對應的變量,在對參數變量重新賦值后,使用=ReQuery()函數刷新視圖。ReQuery()的參數為視圖名。
3.3 利用數據過濾器設計查詢表單
在VFP中數據過濾器可以為數據表或視圖設置邏輯表,將不符合條件的記錄“屏蔽”起來。一個表或視圖設置過濾器后,對表的操作僅限于滿足條件的記錄。數據過濾器實現可以通過菜單方式,也可以使用SET FILTER TO命令實現。
利用SET FILTER TO命令設計如圖2所示的查詢表單,設計界面如圖6所示,表單文件名設為F3。設計步驟如下:
1) 該表單查詢數據涉及到的數據表有Xuesheng.dbf、Kecheng.dbf和Chengji.dbf,打開學生-課程-成績數據庫,創建視圖St2,字段包含Xuesheng.dbf中的Xh,Xm,Kecheng.dbf中的Kcdh,Kcm,Chengji.dbf中的Cj字段。將視圖St2添加到表單數據環境中。
2) 標簽、文本框、命令按鈕的添加和屬性設置同圖3表單的設計。
3) 把數據環境中的視圖St2拖放到表單中,生成表格grdSt2。
4) 調整各個對象大小和布局。
5) 表單事件代碼設計:
“查詢”按鈕的Click事件代碼:
SET FILTER TO St2.Xm=Allt(Thisform.Text1.Value)
Thisform.Refresh
“退出”按鈕的Click事件代碼:
SET FILTER TO
Thisform.Release
討論:表單F3涉及多個表,使用視圖作為數據源相對來說操作更方便,如果要多條件組合查詢,只需在表單上增加輸入文本框,修改SET FILTER TO命令的條件即可。如果對單表進行查詢,用這種設計方法更能顯出優勢,直接將要查詢的數據表加入數據環境,代碼編寫簡單,易于實現。
4 結束語
該文對VFP查詢表單的涉及進行了探討,利用SQL-SELECT、參數化視圖和數據過濾器等方法設計并實現了查詢表單,詳細說明了設計思路及步驟,提供了事件代碼。利用SQL-SELECT方法設計查詢表單,關鍵在SELECT語句。利用參數化視圖,關鍵在參數化視圖的設計。數據過濾器方法關鍵在數據源的組織和SET FILTER TO命令中條件表達式的表示。
參考文獻:
[1] 王珊,薩師煊.數據庫系統概論[M].北京:高等教育出版社,2006.
[2] 劉瑞新,汪遠征.Visual FoxPro程序設計教程[M].北京:電子工業出版社,2006.
[3] 楊佩理,陶瑜.Visual FoxPro數據庫設計教程[M].北京:機械工業出版社,2004.