Delphi 7 中如何使用 Crystal Report 9.2(三、利用 Crystal Report 9 VCL 编程)
Delphi 7 中如何使用 Crystal Report 9.2
李经通
|
日期 |
版本 |
描述 |
备注 |
|
2004-3-12 |
0.1 |
在Delphi 7 中使用Crystal Report 9 VCL等 |
新建 |
|
|
|
|
|
Crystal Report 9 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 的功能非常强大,通过编程我们可以控制报表的导出,打印和界面显示简单功能,而且也能处理报表中的图表显示,数据字段定义等复杂功能,给我们很大的自由度满足我们的应用需求。
组件就可以满足我们的需求
我们用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;
辅助实现数据源的连接
如果数据源不固定,或者用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;
在利用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。
- · 剪贴板的流存储
- · 用Delphi制作DLL小结
- · 使用ACTIVEX和DELPHI开发串口通讯
- · 考虑继承,a tip about 《Inside VCL》
- · 获取其他进程中ListView的文本
- · 设置ListView的页眉图标
- · Delphi 例程 - 字符操纵例程
- · 获取其他程序中TreeView的内容
- · 获取其他进程中ListBox和ComboBox的内容
- · 使用Delphi和Web Services技术开发短信应用程序
- · Delphi例程-应用程序级信息
- · 使用IntraWeb进行Web编程
- · 【Gabing Delva 第0篇】我的小铁锨(代序)
- · 用Delphi编写Win2000服务程序
- · 使用IntraWeb进行Web编程(二)
- · 如何用idFTP遍历整个目录----下载、删除
- · 从一个组合数的求解谈开去
- · 我写的采用csv格式将数据转换为excel的函数,带有分栏功能
- · 事件的危机——调试手记之一
- · 一个四舍五入的函数
- · 窗体的建立时机及缓冲的思想在ini文件中的应用.txt
- · 窗体的建立时机及缓冲的思想在ini文件中的应用.
- · 用Delphi实现文件下载的几种方法
- · 通用查询组件设计(续三)
- · 通用查询组件设计(续四)
- · 在Delphi7中实现停靠功能
- · Delphi 5 反汇编摘要
- · Delphi例程-文件管理例程(1~15)
- · 从数据库绘制MapX地图
- · 用Delphi建立通讯与数据交换服务器—Transceiver技术剖析(上)
- · 用Delphi建立通讯与数据交换服务器—Transceiver技术剖析(下)
- · 《网络吸管》开发手记
- · 关于SMTP和POP3使用及关于客户-服务端的自动连线问题
- · 在Delphi中使用动态图标
- · 在流中查找任意字串
- · 流的解压及压缩(代码精简高效)
- · 在Listbox加背景图
- · Delphi7目录结构----初学者参考
