
| 出版日期:1999-08-09 总期号:847 本年期号:57 |
|
改进vfp的searchclass.vcx
使用过中文vfp的朋友都知道利用vfp提供的wizards类库中的searchform.vcx和searchclass.vcx可以创建一个通用查询表单。这个查询非常通用,操作界面也非常简单明了。但是,此表单有一个缺憾,就是此表单的字段对话框就只能显示字段名,如果数据表的字段名为英文时,显示的字段名对操作人员而言就显的不够清楚。我们一般在设计数据库时给每个字段加以中文标题,用于对字段名的详细说明,就像用brow命令时,就可以用字段标题代替字段名一样,我们也可以通过对searchclass.vcx的修改使其用字段标题代替字段名显示,这样就使得整个界面非常友好。 打开wizards类库,选择searchclass.vcx。 一、修改cbofield1的init事件 在下列语句 for m.i = fcount() to 1 step -1 if inlist(awizflist[m.i,2],"g","m","u") &&memo field =adel(awizflist,m.i) dimension awizflist[max(1,alen(awizflist,1)-1),num_afields] endif endfor 后加上以下程序段: *获取当前的数据表名 tname=alias() *获取数据库名 dname=cursorgetprop('database') set database to (dname) *获取字段标题 for m.i=1 to alen(awizflist,1) fname=tname+′.′+awizflist[m.i,1] *将字段名保存 awizflist[m.i,16]=awizflist[m.i,1] if !empty(dname) fcaption=dbgetprop(fname,′field′,′caption′) *用字段标题代替字段名 awizflist[m.i,1]=iif(!empty(fcaption),fcaption,awizflist[m.i,1]) endif endfor this.rowsourcetype = 5 this.rowsource = "awizflist" this.value = this.list[1,1] 将原最后一句this.value=this.list[1]删除 二、修改cbofield2的init 事件 this.rowsourcetype = 5 this.rowsource = "awizflist" this.value = this.list[1,1] 三、修改searchitem方法程序 在语句m.cfldname = alltrim(m.ofield.value) 后加上以下程序段: *查找对应显示标题的字段名 for m.i=1 to alen(awizflist,1) if m.cfldname=alltrim(awizflist[m.i,1]) *用字段名代替字段标题 m.cfldname=alltrim(awizflist[m.i,16]) endif endfor 这样通过对以上二个字段组合框的init事件和searchclass方法程序的修改就可以完成在字段组合框显示字段标题,而非字段名,只要我们在数据表中设置好每个字段的标题,就可以在字段组合框中显示运用。其实wizards类库中类都可根据我们的实际需要进行改进,在程序中直接引用,这样就减少了我们重新设计类的麻烦。以上程序在中文vfp5.0测试完成。 (请此文作者速与本版编辑联系) |
|||||||||||||||||