摘要: Visual FoxPro可以直接通过向导来创建报表,并通过报表实现对数据的输出,但不容易实现交互式数据的输出。本文就作者经验,给出在VFP报表设计中运用变量来解决交互产生的数据输出难题。
论文关键词:数据输出,VisualFoxPro报表,变量
目前市场上流行的软件开发工具五花八门,java,.net,vc,asp,delphi等,每个开发工具各有所长,但针对中小型企事业的信息管理系统来讲,Visual FoxPro是首选,它简单易学,功能齐备,更重要一点是开发成本低,周期短,这也正是当java,.net,vc,asp,delphi大行其道时,Visual FoxPro还能拥有自已一片天地的原因所在。
1、问题提出
VFP可以直接通过向导来创建报表,并通过报表实现对数据的输出。但通过报表实现的主要是对已存在的固定数据源打印(如以某表文件*.dbf为数据环境),一般情况下不容易实现交互式或针对特定数据检索结果的打印。下面以一个税收系统的上报数据要求为例来说。假设有一个契税.dbf表,其中有流水号、日期、税率(字段值为3%或4%)、不动产(字段值为商品房或存量房)、纳税、面积等字段,税率和不动产字段各有两个允许出现的值,现需按用户随机指定的时间段统计数据,并生成如下报表输出。
商品房
存量房
普通住宅(税率3%)
非普通住宅(税率4%)
普通住宅(税率3%)
非普通住宅(税率4%)
宗数
交易面积
契税收入
宗数
交易面积
契税收入
宗数
交易面积
契税收入
宗数
交易面积
契税收入
此类数据使用SQL代码实现起来十分麻烦,且极易出错,其中涉及多个临时表,故考虑使用其它方法实现。
2.解决方案
对于特定条件下的数据检索要求,可以转换思路,通过中间变量传递数据,思路是:把检索结果存储在数组中,以数组作为变量向报表传递检索结果。但经过查阅多方资料对报表设计中变量的用法这一技术几乎都是一笔带过,以下是作者的一点设计经验,经多次试验无误。
第一步,用表单提取用户随机指定的时间段。
设置“确定”按钮的click事件代码如下:
if thisform.text1.value>thisform.text2.value
messagebox('起始时间不能大于结束时间',48,'提示信息')
else
sele count(*),sum(面积),sum(税额);
from 契税;
where 不动产='商品房';
and日期>=thisform.text1.value;
and日期<=thisform.text2.value;
and 税率=0.03;
into array atemp1
sele count(*),sum(面积),sum(税额);
from 契税;
where 不动产='商品房';
and日期>=thisform.text1.value;
and日期<=thisform.text2.value;
and 税率=0.04;
into array atemp2
……
report form reportqszs preview
endif
上述代码的messagebox()函数主要是引导用户正确输入时间,防止由于用户时间输入的错误导致程序运行异常。程序设计开发人员要重视程序的容错性,针对各种可能情况,采取必要的程序流程控制,实现人性化,智能化的程序引导,开发出适合用户使用的信息管理系统。
第二步,建立报表。由于该报表数据不能由契税.dbf表内数据直接得到,故不能使用报表向导快速生成报表,只能使用报表设计器自行设计。将所需的文字与表格放入报表合适位置,为检索结果留出空间,此时打开报表菜单,选择“变量”,打开“报表变量”窗口,在变量中输入数组名及要提取字段的方法如下:
其它设置不变,输入完毕确认后退出.
在报表设计器为检索结果预留的地方使用报表的“域控件”自动打开“报表表达式”窗口,再使用“表达式生成器”来生成报表表达式。在“表达式生成器”窗口的右下角变量区域,可以看到刚输入的报表变量atemp已出现在变量区域,可以直接双击变量区域的变量名来选择所需变量,此时该变量将出现在报表字段的表达式中.
由于本报表运行所需的数据依赖于表单的运行,所以此时如果点击“表达式生成器”的“检验”将有如下提示,为正常情况不必担心。
第三步,保存报表为qszs.frx.由于本报表的数据依赖运行时在表单中输入的随机时间段,所以编译前务必将该报表设置为“排除”。这时就可以运行表单,通过数组变量向报表传递数据,实现了报表输出交互式的数据.
总之,上面简单的三个步骤即可解决变量在报表设计中运用的难题,将数据检索结果准确地传给报表进行输出。该设计的中心思想在于中间环节借助数组atemp的字段作为报表的数据源实现数据传递,通过报表实现数据精确统计与输出。
3.总结
本文介绍了作者在使用Visual FoxPro开发中小型管理系统过程中积累的一点实践经验。通过一种间接方法,或中间变量实现数据检索结果的输出,借助数组或变量来方便快捷的实现了数据的个性化精确统计与输出。从事程序开发和设计过程中,难免会遇到一些难以解决的问题,有时可能所谓的问题仅仅是如何从很多种不成熟的方法中找出其中稳妥可行的那个方法,不断验证,使其成熟并升华。
参考文献
[1] 商信华,王卫萍 Visual FoxPro程序设计,中国计划出版社,2007
[2] 毛一心,毛一之等 中文版Visual FoxPro应用及实例集锦(第二版),人民邮电出版社,2003
[3]全国计算机等级考试教程二级Visual FoxPro(2008年版),人民邮电出版社,2008
[4]邵洋,谷宇,何旭洪 Visual FoxPro数据库系统开发实例导航(第二版),人民邮电出版社,2005
|