分享
 
 
 

Delphi 7 中如何使用 Crystal Report 9.2(三、利用 Crystal Report 9 VCL 编程)

王朝delphi·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

Delphi 7 中如何使用 Crystal Report 9.2

李经通

日期

版本

描述

备注

2004-3-12

0.1

在Delphi 7 中使用Crystal Report 9 VCL等

新建

一、 利用 Crystal Report 9 VCL 编程

1、 利用VCL编写程序

当我们安装好VCL组件,同时也对VCL中的Demo做了熟悉,下面我们就可以尝试利用VCL组件来编写我们自己的报表系统了。

·新建一个Application,在Data Access Tab 中选择Crpe组件,放置到Form中,再放置一个Button按扭,双击Button,编写如下代码:

procedure TForm1.Button1Click(Sender: TObject);

begin

Crpe1.ReportName := 'C:\your report.rpt';

Crpe1.Execute;

end;

编译代码,执行,点击按扭会打开'C:\your report.rpt报表文件。

对上面代码进行完善一下,例如可以通过打开对话框打开自己想要浏览的报表文件,修改代码如下:

procedure TForm1. Button1Click (Sender: TObject);

begin

if OpenDialog1.Execute then

begin

Crpe1.ReportName := OpenDialog1.FileName;

try

Screen.Cursor := crHourGlass;

Crpe1.Execute;

finally

Screen.Cursor := crDefault;

end;

end;

end;

注意在使用TCrpe.Execute时,最好加上try … finally…,对代码进行保护。

Crystal Report 9 VCL 的功能非常强大,通过编程我们可以控制报表的导出,打印和界面显示简单功能,而且也能处理报表中的图表显示,数据字段定义等复杂功能,给我们很大的自由度满足我们的应用需求。

2、 简单连接数据源代码实现——只使用Tcrpe32组件就可以满足我们的需求

我们用Access数据表举例,首先我们需要用Access来建立我们需要的数据库表结构,然后用Crystal Report 9来创建报表模板(关于如何来制作报表模板不是本文所涉及的内容,读者可以参考Crystal Report 9方面的参考资料),然后在我们的代码中加入Crpe1. Refresh即可。假如我们所创建的Access表文件为dbReport.mdb,则只需要更新dbReport.mdb文件中的数据,我们打开的报表就可以看到新的数据内容的报表了。

try

Screen.Cursor := crHourGlass;

Crpe1.Refresh;

Crpe1.Execute;

finally

Screen.Cursor := crDefault;

end;

3、 复杂数据源实现——需要TcrpeDS辅助实现数据源的连接

如果数据源不固定,或者用Ttable的方式,例如用TclientDataSet方式等,那么我们就需要考虑用到VCL的另一个组件TcrpeDS来实现我们的需求了。

上面说到的是用Access数据库,在这里照样可以使用,但我们这里用TcrpeDS组件实现,所以需要用到ADO数据连接(或者ODBC等其他方法)。

·在Form中加入TADOConnection和TADODataSet这两个组件。

·设置TADOConnection,连接Access数据表。双击ADOConnection组件

·点击Build,弹出数据连接属性,选择Microsoft Jet 4.0 OLE DB Provider

·下一步,连接选择Access数据表文件dbReport.mdb,确定即可。

·将TADODataSet的Connection属性设置为TADOConnection(ADOConnection1)。

·将TcrpeDS的DataSet属性设置为TADODataSet(ADODataSet1)。

·代码实现:

Crpe1.Tables[0].DataPointer := CrpeDS1.DataPointer;

Crpe1.Refresh;

Crpe1.Execute;

TclientDataSet的使用方法,为什么要使用TclientDataSet呢?因为我们一方面不想使程序需要第三方数据库引擎,另一方面想提高速度的时候,就可以考虑使用TclientDataSet,这样我们可以把数据写入TclientDataSet所建立的表临时表中,完全在内存中使用,当然也可以保存,写入文件。

同上面的道理,我们首先需要利用TclientDataSet来建立表,然后将数据写入TclientDataSet建立的表中:

·创建表,进行初始化

table: TclientDataSet;

table := TClientDataset.Create(Application);

·添加字段定义

table.FieldDefs.Add('ID', ftInteger, 0, False);

table.FieldDefs.Add('Status', ftString, 10, False);

table.FieldDefs.Add('Created', ftDate, 0, False);

table.FieldDefs.Add('Volume', ftFloat, 0, False);

·创建数据集

table.CreateDataset;

·打开数据集

table.Open;

·加入数据(加入数据的方法比较多,参考TclientDataSet的使用方法)

for i := 1 to 100 do

begin

table.Append;

table.FieldByName('ID').AsInteger := i;

table.FieldByName('Status').AsString := 'Code'+IntToStr(i);

table.FieldByName('Created').AsDateTime := Date();

table.FieldByName('Volume').AsFloat := Random(10000);

table.Post;

end;

·加入索引

table.IndexFieldNames := 'Created';

·可以将内存中的数据写入文件

table.SaveToFile('c:\mem.cds');

table.LoadFromFile('c:\mem.cds');

·使用过滤条件

table.Filtered := True;

table.Filer := ‘test’;

·显示报表代码

CrpeDS1.DataSet := table

Crpe1.Tables[0].DataPointer := CrpeDS1.DataPointer;

Crpe1.Refresh;

Crpe1.Execute;

4、 处理中遇到的问题

在利用Crystal Report VCL来编写我们的程序的过程中总会遇到这样那样的问题。

例如显示的报表中有超链接,但不能够正常使用,是因为Crystal Report 中drill down event设置为False,需要代码中设置为True,就可以正常使用了。

with Crpe1.WindowButtonBar do

begin

Visible := True;

AllowDrillDown := True;

CancelBtn := False;

ToolbarTips := True;

end;

crpe1.execute

当然我们还会碰到更多棘手的问题,但都是可以解决的,一方面可以查找网站上提供的信息,一方面通过调试修改程序包括VCL。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有