2.3 数据类型的匹配问题
Visual FoxPro中,数据常量依其类型不同而使用不同的定界符。输入时,TextBox必须输入相应的数据类型定界符,否则在查询操作过程中将产生数据类型不匹配的错误而得不到所需要的数据。因此,在查询按钮编写如下程序段对数据类型的匹配问题加以解决。
tjtext=dnam+"."+field(nfield) &&nfield为字段名变量,dnam为数据表
zdtype=type(tjtext) &&求条件字段的数据类型
select itemadd
do case &&对不同的数据类型进行不同处理
case zdtype="C" &&数据为字符型,加上定界符[ ]
if alltrim(itemadd.tj)<>'$'
tjtext=tjtext+" "+alltrim(itemadd.tj)+[ ']+alltrim(itemadd.sl)+[']
else
tjtext=[ ']+alltrim(itemadd.sl)+[']+alltrim(itemadd.tj)+tjtext
endif
case zdtype="D" &&数据类型为日期型,使用ctod()转换为日期型
tjtext=tjtext+alltrim(itemadd.tj)+"CTOD(["+alltrim(itemadd.sl)+"])"
case zdtype="N" &&数据类型为数值型,可直接使用
tjtext=tjtext+alltrim(itemadd.tj)+alltrim(itemadd.sl)
endcase
程序段中,tjtext为字符表达式,存放多个条件项,在以上程序段未尾的SQL语句中作为操作条件:
select &cxtj from &dnam where &tjtext into table cxtemp
其操作结果就是依tjtext中的条件表达式来选定的查询结果,cxtj为查询结果中要输出的字段列表,即将选择字段控制项中的被选字段用“,”连接起来的字符串。cxtemp为存放查询结果的临时表,为数据显示提供数据源。
2.4 查询结果的显示
图2 查询结果表格示意窗口示意
一般用户习惯于使用表格形式来显示数据,因此,在查询到数据结果后,使用Grid控件来显示数据较为合式,如图2所示。若采用前期绑定方式将Grid控件预先设置在form中,由于查询数据结果输出的字段名和字段数的不确定性,致使Grid对表中数据的显示出现数据列宽度的不确定,显示后的数据表格需要调整其宽度才能清楚地浏览到所有信息。所以Grid表格的建立放在数据查询已结果产生,且建立了临时表单cxtemp后,采取后期绑定方式,在程序中添加Grid控件,并设置其宽度、高度、显示方式等属性。选定工作区为cxtemp后添加Grid控件,使Grid控件默认的绑定数据源为cxtemp,程序如下:
select cxtemp &&cxtemp为查询结果临时表,由SQL语句生成
go top
thisform.pagfrcx.activepage=2
thisform.pagfrcx.paglist.addobject('gridcx','grid')
thisform.pagfrcx.paglist.gridcx.visible=.t.
thisform.pagfrcx.paglist.gridcx.left=0
thisform.pagfrcx.paglist.gridcx.top=20
thisform.pagfrcx.paglist.gridcx.width=546
thisform.pagfrcx.paglist.gridcx.height=268
thisform.pagfrcx.paglist.gridcx.deletemark=.F.
thisform.show