资源描述:
《delphi动态报表的设计与实现》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Delphi动态报表的设计与实现第22卷第2期2005年2月计算机应用与软件ComputerApplicationsandSoftwareVo1.22,No.2Feb.2005Delphi动态报表的设计与实现朱松豪刘巧英(江苏工业学院计算机系软件教研室江苏常州213016)摘要本文介绍在Delphi环境中利用Ddplli自带控件生成动态报表,以及通过Exce1自动化技术增强Delplli动态报表处理功能的方法.该方法灵活,简便,实用性强.关键词动态报表Delp}liOLE自动化DESIGNANDn任.LE】ⅥENroFDⅥ皿CREpORT,【rIHD]E】舢ZhuSonghaoLiu
2、Qiaoying(咖删D,c.randEngineering,.7uPolytechnicUniversity,Chang..hou蛳u213016,China)AmethodisintroducedthathowtodesigndynamicreportwithDelphicomponentsandExce1.31aismethodisflexible,simpleandpracti.DynamicreportDelphiOLEautomation0引言报表是信息管理系统的重要组成部分.在系统运行时,用户在很大程度上是以生成系统报表的方便性和灵活性来评价该系统设计的成功与否;同时,
3、报表的生成也是MIS系统开发中最麻烦的一项工作.国内的报表格式复杂多样,因为用户经常会对报表的生成提出不同的要求,例如报表格式的调整,字段的增减,不同的统计要求等,而这些要求会降低系统的通用性,同时也是让程序员头疼的事.近年来,介绍在PowerBuilder环境中开发动态报表的文章比较多.本文介绍在Delphi环境中如何动态选择数据,动态生成报表.这种动态生成的报表更灵活,也更容易实现报表格式的统一.1解决方法一般使用以下两种方法生成动态报表:(1)在程序运行阶段动态生成并执行SQL语句.利用Cre—ate方法动态创建控件;然后根据所选数据字段的长度和数目,在程序中通过修改控件大小和
4、位置的属性来调整控件的大小和外观.这种操作方法简单,但用户只能对报表进行小的改动.(2)利用Delplli强大的OLE功能,由应用程序提取数据传给Excel进行格式加工处理.利用Excel可以制作出几乎任意格式的报表,这样既减轻了开发人员的工作量,又增加了软件的通用性;但这种方法同时带来了用户处理数据工作量的增加.综合考虑,笔者在系统实施中采用两者结合的方法.先用Delplli自带的控件生成动态报表供用户预览,若用户认为报表只需作小的改动,如字段宽度,高度,顺序,字体,对齐方式等,则采用方法一继续修改;若用户对生成的报表认为需作大的改动,如修改表头,页尾,对数据作进一步处理等,则采用
5、方法二,将数据导入到Excel中由用户根据要求进行相应处理.在实际应用中,用户定义的动态报表格式往往不只使用一次,因此可以将报表格式信息保存为模板以备下次使用.2主要工作流程(1)如果已有报表模板满足用户要求,则可以直接打印输出;否则执行下面的步骤.(2)用户选择报表字段及其排列顺序,查询条件;(3)根据用户选择的结果,生成并执行SQL查询语句,产生动态报表数据集TempSet;(4)以TempSet为数据源,生成一个显示网格DBGrid;(5)用户选择报表的打印方向(横向或纵向),调节网格DB-Grid的行和列宽度,高度,字体,字段对齐方式等决定报表数据打印格式;(6)依照DBGr
6、id的字段名称,宽度,高度,字体,字段对齐方式等信息生成报表预览;(7)若再需小的修改则重复步骤4—6;若需对报表作大的改动,则将TempSet导入Excel中,由用户根据需要处理;(8)用户对报表格式满意后,将字段信息和报表格式保存起来并将它作为模板,最后打印输出表.3具体实现下面主要讨论现有报表不能满足用户需要时的情况.3.1动态报表数据集TempSet的产生在图1中,Listboxl记录现有的报表模板名和数据库中所有的表名,Hstbox2记录被选中待输出的表名,即对应SQL语句的Form部分,被Listbox2选中表名所对应的字段名记录在Listbox3中,Listbox4记录
7、选中待输出的字段名,即对应的SQL语句的Se—lect部分;Editl记录选择条件,即对应的SQL语句的Wlqlei~部收稿13期:2OO3—11—17.朱松豪,讲师,主研领域:系统软件.一一第2期朱松豪等:Delphi动态报表的设计与实现l37分;Bomboboxl记录所有的运算符;Edit2记录排序条件,即对应的SQL语句的SortBy部分.图1例如,图1中所示转换为SQL语句就是:~lectstudentid,student.name,student