ccidnet????

出版日期:1999-08-09 总期号:847 本年期号:57

本期导读
要闻综合
电脑工作室
市场
硬件
软件
infotimes
改进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测试完成。

  (请此文作者速与本版编辑联系)