計算機(jī)二級:修改VisualFoxPro類庫實(shí)現(xiàn)按標(biāo)

字號:

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)行正常,效果很好。