VisualFoxProForWindows以其面向?qū)ο缶幊毯涂梢暰幊碳夹g(shù)已成為軟件開發(fā)人員首選的開發(fā)工具之一。它提供的wizstyle.vcr類庫中所包含的豐富的類,使軟件開發(fā)更加容易和方便。
Searchclass(查詢)是wizstyle.vcr類庫中的一個類,也是對數(shù)據(jù)進(jìn)行基本操作必不可少的、最常使用的類之一,用它生成的查詢界面中,直接用字段名作為查詢的提示信息進(jìn)行查詢,這對最終用戶來說是不合適的,因為最終用戶并不能根據(jù)字段名來了解字段的真正含義。對于數(shù)據(jù)庫中的表,VFP提供了字段描述項"標(biāo)題(caption)",在查詢類中可以用數(shù)據(jù)庫中字段的描述項"標(biāo)題"作為查詢的提示信息進(jìn)行查詢。
為解決以上問題,對不同的數(shù)據(jù)庫設(shè)計不同的查詢界面當(dāng)然可以,但事半功倍、一勞永逸的方法還是修改類Searchclass。
修改方法如下:
首先,進(jìn)入到項目管理(ProjectManager),選擇Class頁,展開wizstyle.vcr類庫,找到searchclass后按Modify按鍵對searchclas類進(jìn)行修改。
先對cbofieds1的init事件代碼進(jìn)行修改,修改后的代碼及對修改部分的注釋如下:
#DEFINENUM_AFIELDS16LOCALi,j增加一個局部變量jPUBLICaWizFList,aWizFLista增加一個全局變量aWizFListaDIMENSIONaWizFList[1]=AFIELDS(aWizFList)DIMENSIONaWizFLista[1]定義一個數(shù)組=AFIELDS(aWizFLista)將當(dāng)前表的信息賦給數(shù)組aWizFListaj=aWizFLista(1,12)將當(dāng)前表的名稱賦給jFORm.i=FCOUNT()TO1STEP-1
以下判斷是否存在打開的數(shù)據(jù)庫,考試,大提示并用數(shù)據(jù)庫中的字段標(biāo)題替代數(shù)組aWizFList的第一列字段名。對于自由表,因不存在標(biāo)題,故仍使用字段名。
IFLEN(DBC())$#@62;
0aWizFList(m.i,1)=DBGETPROP(j+"."+aWizFList(m.i,1),"field","caption")ENDIFI
FINLIST(aWizFList[m.i,2],"G","M","U")
&&Memofield =ADEL(aWizFList,m.i)
DIMENSIONaWizFList[MAX(1,ALEN(aWizFList,1)-1),NAFIELDS]=ADEL(aWizFLista,m.i)
該兩行處理內(nèi)存型子段
DIMENSIONaWizFLista[MAX(1,ALEN(aWizFLista,1)-1),
NUM_AFIELDS]ENDIFENDFORTHIS.RowSourceType=5THIS.RowSource="aWizFList"
把原來的以字段名為數(shù)據(jù)源改成了以標(biāo)題為數(shù)據(jù)源THIS.VALUE=THIS.LIST[1]再將seachclass的seachitem事件代碼的第6句m.cFldName=ALLTRIM(m.oField.Value)改為m.cFldName=ALLTRIM(aWizflista(m.oField.listitemid,1)) 完成以上修改后,存盤退出。
以上所做的修改,在Windows95、98環(huán)境下,VFP5.0、VFP6.0 中運(yùn)行正常,效果很好。
Searchclass(查詢)是wizstyle.vcr類庫中的一個類,也是對數(shù)據(jù)進(jìn)行基本操作必不可少的、最常使用的類之一,用它生成的查詢界面中,直接用字段名作為查詢的提示信息進(jìn)行查詢,這對最終用戶來說是不合適的,因為最終用戶并不能根據(jù)字段名來了解字段的真正含義。對于數(shù)據(jù)庫中的表,VFP提供了字段描述項"標(biāo)題(caption)",在查詢類中可以用數(shù)據(jù)庫中字段的描述項"標(biāo)題"作為查詢的提示信息進(jìn)行查詢。
為解決以上問題,對不同的數(shù)據(jù)庫設(shè)計不同的查詢界面當(dāng)然可以,但事半功倍、一勞永逸的方法還是修改類Searchclass。
修改方法如下:
首先,進(jìn)入到項目管理(ProjectManager),選擇Class頁,展開wizstyle.vcr類庫,找到searchclass后按Modify按鍵對searchclas類進(jìn)行修改。
先對cbofieds1的init事件代碼進(jìn)行修改,修改后的代碼及對修改部分的注釋如下:
#DEFINENUM_AFIELDS16LOCALi,j增加一個局部變量jPUBLICaWizFList,aWizFLista增加一個全局變量aWizFListaDIMENSIONaWizFList[1]=AFIELDS(aWizFList)DIMENSIONaWizFLista[1]定義一個數(shù)組=AFIELDS(aWizFLista)將當(dāng)前表的信息賦給數(shù)組aWizFListaj=aWizFLista(1,12)將當(dāng)前表的名稱賦給jFORm.i=FCOUNT()TO1STEP-1
以下判斷是否存在打開的數(shù)據(jù)庫,考試,大提示并用數(shù)據(jù)庫中的字段標(biāo)題替代數(shù)組aWizFList的第一列字段名。對于自由表,因不存在標(biāo)題,故仍使用字段名。
IFLEN(DBC())$#@62;
0aWizFList(m.i,1)=DBGETPROP(j+"."+aWizFList(m.i,1),"field","caption")ENDIFI
FINLIST(aWizFList[m.i,2],"G","M","U")
&&Memofield =ADEL(aWizFList,m.i)
DIMENSIONaWizFList[MAX(1,ALEN(aWizFList,1)-1),NAFIELDS]=ADEL(aWizFLista,m.i)
該兩行處理內(nèi)存型子段
DIMENSIONaWizFLista[MAX(1,ALEN(aWizFLista,1)-1),
NUM_AFIELDS]ENDIFENDFORTHIS.RowSourceType=5THIS.RowSource="aWizFList"
把原來的以字段名為數(shù)據(jù)源改成了以標(biāo)題為數(shù)據(jù)源THIS.VALUE=THIS.LIST[1]再將seachclass的seachitem事件代碼的第6句m.cFldName=ALLTRIM(m.oField.Value)改為m.cFldName=ALLTRIM(aWizflista(m.oField.listitemid,1)) 完成以上修改后,存盤退出。
以上所做的修改,在Windows95、98環(huán)境下,VFP5.0、VFP6.0 中運(yùn)行正常,效果很好。