文档库 最新最全的文档下载
当前位置:文档库 › 在Delphi 中如何使用水晶报表

在Delphi 中如何使用水晶报表

https://www.wendangku.net/doc/b93934232.html,/keylife/iblog_show.asp?xid=4650



--------------------------------------------------------------------------------

大富翁论坛版权所有
KeyLife富翁笔记
作者 : archonwang
标题 : 在Delphi 中如何使用水晶报表
关键字:
分类 : 个人专区
密级 : 公开
(评分: , 回复: 2, 阅读: 3275) ??
首先选择 

1,project -- import type library 出现一个box

2,在box中 选择 crystal report x activex designer runtime library(x代表你的水晶报表是什么版本的,如8.5,那x就是8.5)

3. 点击 Install 按纽 ,然后点击 Into New Package(这里会要求你输入一个路径(如:e:\borland\delphi6\Lib\cradrl.dpk) , 点击 ok就可以了。在确定框中点击 yes,在Delphi 的Activex中就增加了一个application对象。

4.把application 拖放到form1中,project 自动生成如下代码:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;

type
TForm1 = class(TForm)
Application1: TApplication;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin

end;

end.

添加完apllication后,我们还要再增加一个报表浏览组件crystal Reports viewer control(crviewer.dll)
步骤和上面是一样的:
首先选择 1,project -- import type library 出现一个box

2,在box中 选择 crystal reports viewer control

3. 点击 Install 按纽 ,然后点击 Into New Package(这里会要求你输入一个路径(如:e:\borland\delphi6\Lib\crviewer.dpk) , 点击 ok就可以了。在确定框中点击 yes,在
Delphi 的Activex中就增加了一个crviewer对象。

4.把它添加到form1

5.在form1中增加一个Button
现在就可以在button 的click 事件中写如下代码:

procedure TForm1.Button1Click(Sender: TObject);
var
report : IReport;
begin
{我们可以打开一个已经生成的报表,这是动态的,可以在报表制作的时侯连接好数据库,当然也可以通过在delphi中调用LogonServer setlogoninfo来动态连接数据库。}
report := Application1.OpenReport('c:\report1.rpt', crOpenReportByTempCopy);
/*The CrOpenReportByDefault constant places a lock on the RPT file preventing it from being accessed by other applications or users. CrOpenReportByTempCopy is often preferred since it opens a temporary copy of the RPT file instead. */
crViewer1.ReportSource := Report;
crViewer1.ViewReport;
end;

/这样,我们就成功的调入了一个报表,实现了delphi对外部报表的引用



2003-12-2 11:09:00
发表评语???

2004-3-26 9:09:52 [李经通]Delphi 7 中如何使用 Crystal Report 9.2[编者注]:几天前上网时看到的一份极好文档,在

此推荐给各位共同学习和探讨。


2004-3-26 9:11:51 一、直接使用Crystal Report 9.2 动态库1、开发环境安装注意事项
开发环境要求安装 Delphi 7 和 Crystal Report 9.2,安装Crystal Report 9.2 的时候需要注意不推荐使用典型安装,因为在典型安装中很多功能都没有安装进去,例如数据访问和导出支持,最好使用自定义安装:
·初学者直接将其所有功能选中安装即可,保证不遗漏功能。
·高级使用者,可以针对自己的使用情况来选择。
·见下图,默认情况下没有选中字段定义和常用的HTML导出,都是使用的时候才进行安装。



2004-3-26 9:12:53


2004-3-26 9:14:30 2、在Delphi 7 中引入Crystal Report Viewer 控件
·启动Delphi IDE,关闭所有文件。
·主菜单Project | Import Type Library… 打开导入类型库。
·选择Crystal Report Viewer Control 9(Version 9.2)。
·选中“Generate Component Wrapper”复选框,点击Install安装。



2004-3-26 9:16:51


2004-3-26 9:17:09 安装成功后在ActiveX组件中看到有CRViewer9组件,直接拖拉到Form中就可以使用了,因为考虑到程序的可控性和扩展性,不推荐这样使用,在次也不做多介绍。


2004-3-26 9:19:53 二、Crystal Report 9.2 VCL 的安装1、准备合适的VCL组件
下载和自己开发环境匹配的VCL,例如我们现在所使用的是Delphi 7和Crystal Report 9,所以选择下载Crystal Reports 9 VCL - supports Delphi 7的VCL,地址:
https://www.wendangku.net/doc/b93934232.html,/products/reporting/crystalreports/vcl/default.asp

或者使用Crystal Report 9中带有的\Program Files\Crystal Decisions\Crystal Reports 9\Samples\chs\Code\Delphi\cr85vcl.exe,注意,这个VCL是Crystal Report 8.5的,但也可以使用,但最好使用https://www.wendangku.net/doc/b93934232.html,网站提供最新的VCL。
注意:由于Crystal Decisions被business objects收购后, 原Crystal Report for Delphi VCL的作者Frank已经不提供VCL的更新(Frank的网站已经不能访问了
http://mypage.uniserve.ca/~zimmerman/delphi.htm
),关于最新资料最好到
https://www.wendangku.net/doc/b93934232.html,/support
上查询。

2、安装VCL
·将VCL组件文件解压缩到Program Files\Borland\crystal9_vcl 目录下。
·启动Delphi IDE,关闭所有文件。
·主菜单 File | Open,打开Program Files\Borland\crystal9_vcl\Delphi7\dcl7cr9.dpk。
·安装组件包



2004-3-26 9:21:00 ·确认安装成功



2004-3-26 9:22:05 ·主菜单Tools | Environment Options…
·编辑库搜索路径



2004-3-26 9:23:13 ·浏览



2004-3-26 9:24:02 ·选取crystal9_vcl\Delphi7



2004-3-26 9:25:03 ·添加



2004-3-26 9:26:17 ·确认添加
·关闭所有文件,注意不要保存相应的包文件

3、对VCL组件中Demo使用的问题
在使用Crystal Reports 9 VCL for Delphi 7 时,安装VCL后大

家都会去看看VCL里带的例子,但是这些例子经过编译发现不少问题,首先这些例子是在老版本基础上制作的,所以用我们新的VCL和环境编译就会出现错误。
打开Program Files\Borland\crystal9_vcl\Delphi7\Samples\MDI32中的工程,编译发现一系列错误:
错误行:[red]Crpe1.ExportOptions.FileType := ExcelXLS[/red];
原因是新的VCL里的导出文件类型命名进行了修改,而且对支持的格式也有所变化,所以要针对新的导出文件类型要对代码进行修改。这里的ExcelXLS 就需要修改为MSExcel ,代码中的LotusWK3格式已经在此VCL里不支持了。Crystal Reports 9 VCL for Delphi 7中支持的格式如下:
TCrExportType = (AdobeAcrobatPDF, CrystalReportRPT, HTML32,
HTML40, MSExcel, MSWord, ODBCTable, Records, ReportDefinition,
RichText, SeparatedValues, TabSeparatedText, TextFormat, XML1);
如果遇到其他问题,可以逐步调试,看是Demo中的问题,还是VCL组件中的问题。

4、VCL组件中的修改
VCL组件中本身就有一些BUG,需要我们进行修改。
·当使用TCrpeDS组件用TTable等数据源时,不能显示字符串字段。
解决办法:打开UcrpeDS.pas,修改282行
ftString : pVal := varString;
修改为:
ftString : pVal := varOleStr;
修改完保存,然后重新编译Program Files\Borland\crystal9_vcl\Delphi7\dcl7cr9.dpk。
·提示信息汉化的处理
我们在使用的过程中发现,虽然我们用了Crystal Report 9.2中文版本,但通过编写程序后发现我们的程序错误提示信息中包含了英文信息,这是我们不想看到的。例如在Ucrpe32.pas的8067行:
MessageDlg('Error: ' + IntToStr(FLastErrorNumber) +
Chr(13) + Chr(10) + FLastErrorString, mtError, [mbOk], 0);
明显看出错误信息中加入“Error”单词,我们可以对其进行修改为:
MessageDlg(FLastErrorString, mtWarning, [mbOk], 0);

同样道理,根据自己实际情况检查代码,如果需要修改,可以对VCL代码修改后然后保存,重新编译,就会达到自己所需要的效果。


2004-3-26 9:30:16 三、利用 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.Rep

ortName := 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组件


2004-3-26 9:33:06


2004-3-26 9:34:00 ·点击Build,弹出数据连接属性,选择Microsoft Jet 4.0 OLE DB Provider



2004-3-26 9:34:51 ·下一步,连接选择Access数据表文件dbReport.mdb,确定即可。



2004-3-26 9:36:08 ·将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(Applica

tion);
·添加字段定义
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。


2004-3-26 9:37:12 四、如何发布自己的程序当我们把程序编写完成后,最后的任务是要把我们的程序发布出去,但是由于Crystal Report 带有很多库,这样给我们发布程序带来了很多麻烦,使我们发布出去的程序在客户机上功能不能够正常使用,下面就介绍如何发布程序,以及经常会碰到的问题:

1、利用InstallShield DevStudio 9来制作安装程序
在InstallShield DevStudio 9已经带有Crystal Report 9的Merge Modules,但是那是英文的,不能够满足我们的需要,我们需要下载简体中文的,进行替换。下载地址:https://www.wendangku.net/doc/b93934232.html,/communityCS/FilesAndUpdates/cr9rdcmergemodules_chs.zip.asp?recDnlReq=Record&dnlPath=cr9rdcmergemodules_chs.zip。
·下载后解压缩,替代\Program Files\Common Files\Merge Modules中对应的文件。
·将Crystal Report 9-Crystal Report Engine Components选择加入我们的安装程序中。
·如果使用了TclientDataSet等数据集,那么需要加入midas.dll。
·需要加入crpe32.dll、crpe32_res_chs.dll、gdiplus.dll、commonobjmodel.dll、rptobjmodel.dll、u2fcompress.dll
·更加自己程序功能特性加入其他库文件。

2、运行库说明
虽然Cry

stal Decisions申明Crystal Reports components 支持多个版本安装在同一机器上,但不支持这样做,实际应用过程中还是会发生一系列问题。
当发布自己的程序时,依靠Crystal Report 运行库主要有以下几个方面:
——访问Crystal Report Engine的方法
——报表所用的数据源
——导出类型支持
——其他功能,如图表、地图、公式的支持。
Crystal Reports components中的四个主要器件介绍:
——Craxdrt9.dll —— The Crystal Reports 9 ActiveX Designer Runtime DLL. This DLL is the reporting engine and it exposes the Object Model Hierarchy. Distribute this DLL with all applications using the RDC。
——CRViewer9.dll —— The Crystal Reports View Control. Use this component to preview your report. If you are not previewing the report, then it is not necessary to distribute this DLL。
——CRDesignerCtrl.dll —— Embeddable Crystal Reports 9 Designer Control. This DLL exposes report creation and designer capabilities in your application and allows you to create a report at runtime using an ActiveX designer。
——Craxddrt9.dll —— Crystal Reports 9 ActiveX Designer Design and Runtime DLL. This DLL is the engine used to design and format reports at design time, as well as to access and process reports at runtime。
虽然Crystal Report 提供了安装包,但安装包中的文件比较多,很多都是不是我们所需要的,我们可以挑选自己需要的库文件加入安装程序中,主要参考Program Files\Crystal Decisions\Crystal Reports 9\Developer Files\Help\chs\runtime.chm帮助文件。
·主要需求文件
Craxdrt9.dll: Mfc42.dll, Msvcrt.dll, Msvcp60.dll, Comdlg32.dll, Comctl32.dll
CRViewer9.dll: Comctl32.dll
CRDesignerCtrl.dll: Msvcrt.dll, Comctl32.dll
Craxddrt9.dll: Mfc42.dll, Msvcrt.dll, Msvcp60.dll, Comctl32.dll, Comdlg32.dll, Msvcirt.dll
·需要C&C++运行库
——Mfc42.dll (version 6.0.8447.0 or higher)
——Msvcrt.dll (version 6.0.8397.0 or higher)
——Msvcp60.dll (version 6.0.8168.0 or higher)
·其他系统库
Comdlg32.dll
——Comctl32.dll
——Riched20.dll
——Usp10.dll
·Crystal Report 运行库文件需要安装以下文件和操作:
——Run CR9Deploy.reg; (or modify this file to where you will have your bin folder, the rest of this article assumes that the bin folder location is "C:\Program Files\Common Files\Crystal Decisions\2.0\bin") refer to 'Runtime.chm' and look under 'Side-by-side installation' for more information.
——Copy Unicows.dll to "C:\Program Files\Common Files\Crystal Decisions\2.0\bin". Include unicows.dll (version 1.0.3703.0 or higher) into distributions that are targeted for Windows 9x computers. For more information, refer to knowledge base article c2011871
——Copy Craxdrt9.dll to "C:\Program Files\Common Files\Crystal Decisions\2.0\bin" (Register this file using regsvr32.exe)
——Copy the following dependency files to "C:\Program Fil

es\Common Files\Crystal Decisions\2.0\bin"
——Implode.dll (for applications using reports created in versions previous to Crystal Reports 8)
——Querybuilder.dll
——Ufmanager.dll
——Atl.dll (There are two versions of Atl.dll one for Win9x and another for WinNT/Win2000. Please refer to special instructions in 'Runtime.chm' and look under 'Additional Components' and then 'Paged-ranged export' for more information.)
——Copy Crqe.dll to "C:\Program Files\Common Files\Crystal Decisions\2.0\bin" (Register this file using regsvr32.exe)
——Copy keycode.dll to "C:\Program Files\Common Files\Crystal Decisions\2.0\bin" (Register this file using regsvr32.exe)
·如果需要允许在应用程序查看报表那么需要下面的操作:
——Copy Crviewer9.dll to "C:\Program Files\Common Files\Crystal Decisions\2.0\bin" (Register this file using regsvr32.exe)
·如果需要程序中能够设计报表模板的功能,则需要下面的操作:——
Copy Crdesignerctrl.dll to "C:\Program Files\Common Files\Crystal Decisions\2.0\bin" (Register this file using regsvr32.exe)
——Copy Craxddrt.dll to "C:\Program Files\Common Files\Crystal Decisions\2.0\bin" (Register this file using regsvr32.exe)
·ACTIVE DATA
如果需要用到ACTIVE DATA(ADO, CDO, DAO, RDO, etc),则需要加入数据库访问的库文件。
·DATABASE DLLs
如果程序中用的不是活动数据连接,而是数据库文件(如Access表等)则需要crdb_*.dll or p2*.dll相应的库文件支持。
·导出 Dlls
根据自己的需要选择导出Dll文件。

3、遇到的一些问题
·导出HTML问题(虽然我们加了很多库文件,最后发现导出HTML不能正常使用),我们需要检查如下库文件,是否全部包含了。
在Program Files\Common Files\Crystal Decisions\2.0\bin中检查:
——Crxf_html.dll
——ReportRenderer.dll (Register this file using regsvr32.exe)
——PageObjectModel.dll (Register this file using regsvr32.exe)
——WebReporting.dll (Register this file using regsvr32.exe)
——Commonobjmodel.dll (Register this file using regsvr32.exe)
——Rptdefmodel.dll (Register this file using regsvr32.exe)
——U2fcompress.dll
——DataDefModel.dll
——Gdiplus.dll (Due to licensing restrictions, you must get gdiplus.dll from the Microsoft web site. Go to https://www.wendangku.net/doc/b93934232.html,/msdownload/platformsdk/sdkupdate/psdkredist.htm and select "GDI+ RTM").
在Crystal report 安装包中已经带有Crxf_html.dll 、ReportRenderer.dll 、PageObjectModel.dll 、WebReporting.dll这几个文件了,我们需要加入 U2fcompress.dll 、Commonobjmodel.dll 、Rptdefmodel.dll 、Gdiplus.dll四个文件就可以解决导出HTML的问题。
如果在报表中有自定义的函数,则需要加入U2*.dll (UFL)库文件。

·在客户机上安装程序后,发现带有图表的报表不能正常显示,需要将Program Files\ Common Files\Crystal Decisions\2.0\bin中的sscsdk80.dll拷贝到

Windows\WINNT\System32,这是因为可能客户机上含有老版本的sscsdk80.dll,需要将新版本的文件拷贝到系统目录下面。


2004-3-26 9:37:42 五、总结回顾我们在Delphi 7 中利用Crystal Report 9 VCL 开发项目的历程发现实际上使用方法很简单,但我们在当初开始使用的时候总会遇到这样那样的问题,首先是我们使用认识需要一个过程,其次就是Crystal Report 9 VCL中存在很多问题,需要我们发现,去修正。当然,本文也是一个粗浅的使用指导,里面有很多缺陷和不足,需要大家使用过程中去发现和完善,本文的目的是引导大家尽快熟悉使用Crystal Report 9 VCL在Delphi 中开发我们的程序。


发表评语???






(C) 版权所有,大富翁编程网站 1998-2004 粤ICP备05016107号
感谢您的惠顾,如有任何建议和意见,请 联系版主。2004.3.20

相关文档
相关文档 最新文档