Crystal Report在VB报表设计中的应用技巧

时间:2022-09-04 03:00:22

Crystal Report在VB报表设计中的应用技巧

摘要:该文介绍了在水晶报表在Visual Basic 6.0中应用,给出水晶报表在VB程序设计中的编程步骤,介绍了子报表在报表设计中的应用,给出了报表设计中自动补空行的方法,并给出了公式字段和参数字段的使用技巧。文中以不同报表实例详细介绍了水晶报表在VB报表设计中的应用技巧。

关键词:水晶报表;Visual Basic 6.0;报表设计

中图分类号:TP311 文献标识码:A文章编号:1009-3044(2009)34-9699-02

Application of Crystal Report in Visual Basic Report Design

HAO Shen-xue

(Shandong Yingcai College Jinan, Shandong 250104,China)

Abstract:The application of Crystal Report is introduced in this paper. The report design and programming step are described. The application of subreport in Crystal Report is introduced. The method of auto appending empty lines in the report design is carried out. The skill of formula field and parameter field application is also introduced. There give several examples in this paper.

Key words:crystal report; Visual Basic 6.0; report design

1 Crystal Report简介

水晶报表(Crystal Report)是业内最专业、功能最强的报表系统,它除了强大的报表功能外,最大的优势是实现了与绝大多数流行开发工具的集成和接口。利用水晶报表在VS平台开发软件系统的打印模块方便快捷。VB是一种流行的数据库开发平台,用其开发的C/S系统在社会上有非常大的保有量,但VB的报表功能明显满足不了设计需要,水晶报表在VB中的应用就显得尤为重要。

水晶报表是分PUSH与PULL的不同模型,所谓PUSH是指向水晶报表中填入数据,即由报表程序自行填充打印数据的数据集合;PULL是指设计报表时直接连接数据库中的数据源作为报表隐隐数据。

2 Crystal Report在VB中的编程步骤

在VB中设计报表时可以将在水晶报表中设计的报表添加至工程中,也可以直接在VB中设计水晶报表。用VB调用水晶报表进行报表开发的简单接口方法是,在水晶报表中用“仅字段定义”来获得字段分布文件,用字段文件创建报表字段,这样可以使得报表设计时无需连接数据库,而报表中的字段也可由字段文件提供,从而提高了报表设计的灵活性。然后通过在VB中使用水晶报表对象的Database.SetDataSource来强制改变报表的数据源(ADO.recordset),从而获得软件中要打印的报表数据。

VB中设计报表的步骤如下:

1)在水晶报表中建立rpt文件,并利用“仅字段定义”设置报表字段。如图1中GZJLXXB.TTX文件即在水晶报表中生成的字段定义文件;

2)在rpt文件中设计报表格式。如图2中所示即在水晶报表中设计的报表格式;

3)将rpt文件添加至VB工程,并为报表显示设置合适的数据集合。假设报表对象名为Report则通过如下代码为报表设置打印数据集合,并利用CRViewer91控件实现报表显示。

rsTemp.Open " select * from gzjlxxb", LinkStr, adOpenStatic, adLockOptimistic, adCmdText

Report.EnableParameterPrompting = False

Report.DiscardSavedData

Report.Database.SetDataSource rsTemp

CRViewer91.ReportSource = Report

CRViewer91.ViewReport

3 VB中设计水晶报表的技巧

3.1 子报表的应用

在报表设计中经常需要在某报表中打印其他报表内容,比如在员工基本信息报表中还要打印员工的学历教育经历和工作经历信息。如图3所示,此时报表设计时将整张报表设计为主表,学历教育经历设计为子报表XLJYJLXXB,工作经历设计为子报表GZJLXXB,分别为主报表和两个子报表设置数据源来实现整张报表的打印工作。

假设主报表为Report,设置数据源的代码如下:

Report.Database.SetDataSource rsTemp

Set subReport = Report.OpenSubreport(Report.GZJLXXB.Name)

subReport.Database.Tables(1).SetDataSource rsTemp2

Set subReport = Report.OpenSubreport(Report.XLJYJLXXB.Name)

subReport.Database.Tables(1).SetDataSource rsTemp1

CRViewer91.ReportSource = Report

CRViewer91.ViewReport

3.2 报表设计中自动补空行

报表设计时,很多情况我们希望对于行数较少数据打印时也按某固定行数来打印,从而实现打印出的报表较为美观,例如当某员工没有工作经历信息时,在报表打印时仍然要将相应工作经历一栏打印出来并保留6个空行。此时可以在设计报表工作经历子报表时,在报表的“详细资料”节中多新建5个“详细资料”节,从而共有6个“详细资料”节,并为新加的每个“详细资料”节的“抑制显示”编写如下代码,比如为“详细资料c”编写如下代码:

if count({GZJLXXB.ZGBH}) mod 6>0 and count({GZJLXXB.ZGBH}) mod 6

else true

这样报表中每一节根据当前打印记录的条数来决定该节是否显示,从而达到自动补空行的效果。结合3.1和3.2设计出的报表如图4所示。

3.3 报表打印巧用公式字段和参数字段

报表设计时若报表中部分数据不能直接由数据库中查询得到,需要将数据库中查询得到的数据进行转换之后进行打印,此时可利用公式字段实现。比如学生毕业成绩表中成绩一栏要求打印数值型分数,而数据库中存储的数据存在“补及格”字样的成绩数据,要实现此要求可以在报表中建立公式字段CJ并编写如下公式,并将CJ字段作为报表打印字段。

if( InStr ({KC.KCCJ},"补及格" )=0 )then {KC.KCCJ} else "60"

报表设计时,若要打印的所有数据中某字段数据相同,且记录条数较多时,可考虑将此数据相同的字段设计为参数字段,从而在查询报表数据源时省去该字段的查询,从而降低数据查询量,降低网络的通信量,提高程序打印效率。比如毕业成绩单打印中将年级设计为参数字段NJ,从而使得数据集合中无需再查询年级字段。使用参数字段时可通过如下语句为报表设置参数字段的值。

Report.ParameterFields(1).ClearCurrentValueAndRange

Report.ParameterFields(1).AddCurrentValue Trim(txtNJ.Text)

4 总结

本文介绍了水晶报表在VB中的编程步骤及报表设计中的几个技巧应用,本文是作者在进行软件开发过程中学习和总结的一点经验,希望对于利用VB进行软件开发者进行报表设计时能有一定的借鉴作用。水晶报表在VS平台软件开发中被广泛应用,在VB中应用水晶报表与其它VS工具应用方式类似。

参考文献:

[1] 李莉,郭忠文.基于Web的报表打印方法[J].计算机工程与设计,2004(5).

[2] 张晓红.VB中如何利用水晶报表控件实现报表[J],陕西理工学院学报:自然科学版,2005(4).

[3] 陈呈超.应用Crystal Report实现期刊统计、费用报表与管理[J].中国科技期刊研究,2009(1).

[4] 富君等.NET平台下水晶报表的应用[J].中国水运:学术版,2007(6).

[5] 艾灵仙.管理信息化中水晶报表的打印与精确打印的实现[J].中国管理信息化:会计版,2009(4).

上一篇:基于MATLAB编译器的VC与MATLAB混合编程 下一篇:基于LDRA的嵌入式软件覆盖率测试方法