用VFP6.0編寫完整的應(yīng)用程序時查詢系統(tǒng)往往是不可缺少的重要部分。而開發(fā)一個優(yōu)秀的查詢系統(tǒng)需要很多的應(yīng)用技巧。由于工作原因,筆者經(jīng)常開發(fā)查詢系統(tǒng)模塊,現(xiàn)將個人編程中總結(jié)的一些技巧介紹給大家,希望對讀者的應(yīng)用開發(fā)有所幫助。
任務(wù)進度條的實現(xiàn)
在查詢的過程中,如果數(shù)據(jù)較多,需要用戶等待時,查詢系統(tǒng)中應(yīng)有進度條加以顯示,才能使系統(tǒng)更加具有規(guī)范性。具體實現(xiàn)方法如下:
1.選擇VFP的系統(tǒng)選單“工具”中“選項”條,彈出“選項”窗口,在窗口中點擊“ActiveX控件”欄,添加任務(wù)進度欄控件Microsoft ProgressBar Control Version5.0(SP2)至ActiveX工具箱中。
2.選定表單控件工具欄中“ActiveX控件”,添加控件Microsoft ProgressBar Control Version6.0至查詢的表單Form1中,并設(shè)置其屬性Max值為1000。
3.將下列代碼添加到數(shù)據(jù)查詢程序代碼之后:
for i=1 to 1000
for j=1 to 2000
j=j+1
endfor
thisform.olecontrol1.value=i
i=i+1
endfor
messagebox('數(shù)據(jù)查詢完畢,OK!',0+64)
thisform.release
clear events
通過這樣的設(shè)置,在查詢時如果時間較長,查詢進度條會為用戶顯示查詢?nèi)蝿?wù)的運行情況。
應(yīng)用宏命令實現(xiàn)組合查詢
在組合查詢中,需要查詢的組合項通常很多,如果每項都使用不同的變量,編程會非常煩瑣。筆者使用宏命令輕松實現(xiàn)查詢組合條件,具體實現(xiàn)的方法是在查詢按鈕里加入如下代碼:
LOCAL cFilter,nCnt,cCondition
FOR nCnt = 1 to THISFORM.ControlCount
IF TYPE('THISFORM.Controls(nCnt).controlSource') <> "U" THEN
IF !EMPTY(THISFORM.Controls(nCnt).ControlSource) AND ;
TYPE('THISFORM.Controls(nCnt).value') <> "U" THEN cCondition=THIS.Parent.parseCondition(THISFORM.Controls(nCnt).value,THISFORM.Controls(nCnt).controlSource)
IF !EMPTY(cCondition) THEN
cFilter = cFilter + " AND " cCondition
ENDIF
ENDIF
ENDIF
ENDFOR
通過這樣的設(shè)置,雖然有多個查詢條件,但查詢的組合條件為cFilter,以后的應(yīng)用只要對cFilter進行處理即可。
刪除查詢表中的空記錄
使用類查詢(_dataquery.vcx)時,會在待查詢表中的最后自動插入一條空記錄,而在實際的GRID表格顯示中,我們是不希望將空記錄顯示出來的。下面是解決此問題的詳細步驟:
1.在主程序或Form對象的Load事件輸入以下代碼:
SET DELETE ON
2.在查詢結(jié)束代碼后輸入以下代碼:
Thisform.Refresh
&&&&刷新表單
go bottom
delete next 1
&&&&因為當前表被添加了一個空記錄,在實際應(yīng)用中應(yīng)刪除掉
Thisform.Grid1.Column1.Setfocus
go top
Thisform.grid1.refresh
&&&&刪除一條記錄后,應(yīng)及時地刷新GRID表
任務(wù)進度條的實現(xiàn)
在查詢的過程中,如果數(shù)據(jù)較多,需要用戶等待時,查詢系統(tǒng)中應(yīng)有進度條加以顯示,才能使系統(tǒng)更加具有規(guī)范性。具體實現(xiàn)方法如下:
1.選擇VFP的系統(tǒng)選單“工具”中“選項”條,彈出“選項”窗口,在窗口中點擊“ActiveX控件”欄,添加任務(wù)進度欄控件Microsoft ProgressBar Control Version5.0(SP2)至ActiveX工具箱中。
2.選定表單控件工具欄中“ActiveX控件”,添加控件Microsoft ProgressBar Control Version6.0至查詢的表單Form1中,并設(shè)置其屬性Max值為1000。
3.將下列代碼添加到數(shù)據(jù)查詢程序代碼之后:
for i=1 to 1000
for j=1 to 2000
j=j+1
endfor
thisform.olecontrol1.value=i
i=i+1
endfor
messagebox('數(shù)據(jù)查詢完畢,OK!',0+64)
thisform.release
clear events
通過這樣的設(shè)置,在查詢時如果時間較長,查詢進度條會為用戶顯示查詢?nèi)蝿?wù)的運行情況。
應(yīng)用宏命令實現(xiàn)組合查詢
在組合查詢中,需要查詢的組合項通常很多,如果每項都使用不同的變量,編程會非常煩瑣。筆者使用宏命令輕松實現(xiàn)查詢組合條件,具體實現(xiàn)的方法是在查詢按鈕里加入如下代碼:
LOCAL cFilter,nCnt,cCondition
FOR nCnt = 1 to THISFORM.ControlCount
IF TYPE('THISFORM.Controls(nCnt).controlSource') <> "U" THEN
IF !EMPTY(THISFORM.Controls(nCnt).ControlSource) AND ;
TYPE('THISFORM.Controls(nCnt).value') <> "U" THEN cCondition=THIS.Parent.parseCondition(THISFORM.Controls(nCnt).value,THISFORM.Controls(nCnt).controlSource)
IF !EMPTY(cCondition) THEN
cFilter = cFilter + " AND " cCondition
ENDIF
ENDIF
ENDIF
ENDFOR
通過這樣的設(shè)置,雖然有多個查詢條件,但查詢的組合條件為cFilter,以后的應(yīng)用只要對cFilter進行處理即可。
刪除查詢表中的空記錄
使用類查詢(_dataquery.vcx)時,會在待查詢表中的最后自動插入一條空記錄,而在實際的GRID表格顯示中,我們是不希望將空記錄顯示出來的。下面是解決此問題的詳細步驟:
1.在主程序或Form對象的Load事件輸入以下代碼:
SET DELETE ON
2.在查詢結(jié)束代碼后輸入以下代碼:
Thisform.Refresh
&&&&刷新表單
go bottom
delete next 1
&&&&因為當前表被添加了一個空記錄,在實際應(yīng)用中應(yīng)刪除掉
Thisform.Grid1.Column1.Setfocus
go top
Thisform.grid1.refresh
&&&&刪除一條記錄后,應(yīng)及時地刷新GRID表