在Delphi 中如何使用水晶报表.docx
- 文档编号:12680752
- 上传时间:2023-04-21
- 格式:DOCX
- 页数:18
- 大小:23.90KB
在Delphi 中如何使用水晶报表.docx
《在Delphi 中如何使用水晶报表.docx》由会员分享,可在线阅读,更多相关《在Delphi 中如何使用水晶报表.docx(18页珍藏版)》请在冰豆网上搜索。
在Delphi中如何使用水晶报表
--------------------------------------------------------------------------------
大富翁论坛版权所有
KeyLife富翁笔记
作者:
archonwang
标题:
在Delphi中如何使用水晶报表
关键字:
分类:
个人专区
密级:
公开
(评分:
回复:
2,阅读:
3275)?
?
首先选择
1,project--importtypelibrary出现一个box
2,在box中选择crystalreportxactivexdesignerruntimelibrary(x代表你的水晶报表是什么版本的,如8.5,那x就是8.5)
3.点击Install按纽,然后点击IntoNewPackage(这里会要求你输入一个路径(如:
e:
\borland\delphi6\Lib\cradrl.dpk),点击ok就可以了。
在确定框中点击yes,在Delphi的Activex中就增加了一个application对象。
4.把application拖放到form1中,project自动生成如下代码:
unitUnit1;
interface
uses
Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,Dialogs;
type
TForm1=class(TForm)
Application1:
TApplication;
procedureFormCreate(Sender:
TObject);
private
{Privatedeclarations}
public
{Publicdeclarations}
end;
var
Form1:
TForm1;
implementation
{$R*.dfm}
procedureTForm1.FormCreate(Sender:
TObject);
begin
end;
end.
添加完apllication后,我们还要再增加一个报表浏览组件crystalReportsviewercontrol(crviewer.dll)
步骤和上面是一样的:
首先选择 1,project--importtypelibrary出现一个box
2,在box中选择crystalreportsviewercontrol
3.点击Install按纽,然后点击IntoNewPackage(这里会要求你输入一个路径(如:
e:
\borland\delphi6\Lib\crviewer.dpk),点击ok就可以了。
在确定框中点击yes,在
Delphi的Activex中就增加了一个crviewer对象。
4.把它添加到form1
5.在form1中增加一个Button
现在就可以在button的click事件中写如下代码:
procedureTForm1.Button1Click(Sender:
TObject);
var
report:
IReport;
begin
{我们可以打开一个已经生成的报表,这是动态的,可以在报表制作的时侯连接好数据库,当然也可以通过在delphi中调用LogonServersetlogoninfo来动态连接数据库。
}
report:
=Application1.OpenReport('c:
\report1.rpt',crOpenReportByTempCopy);
/*TheCrOpenReportByDefaultconstantplacesalockontheRPTfilepreventingitfrombeingaccessedbyotherapplicationsorusers.CrOpenReportByTempCopyisoftenpreferredsinceitopensatemporarycopyoftheRPTfileinstead.*/
crViewer1.ReportSource:
=Report;
crViewer1.ViewReport;
end;
/这样,我们就成功的调入了一个报表,实现了delphi对外部报表的引用
2003-12-211:
09:
00
发表评语?
?
?
2004-3-269:
09:
52[李经通]Delphi7中如何使用CrystalReport9.2[编者注]:
几天前上网时看到的一份极好文档,在此推荐给各位共同学习和探讨。
2004-3-269:
11:
51一、直接使用CrystalReport9.2动态库1、开发环境安装注意事项
开发环境要求安装Delphi7和CrystalReport9.2,安装CrystalReport9.2的时候需要注意不推荐使用典型安装,因为在典型安装中很多功能都没有安装进去,例如数据访问和导出支持,最好使用自定义安装:
·初学者直接将其所有功能选中安装即可,保证不遗漏功能。
·高级使用者,可以针对自己的使用情况来选择。
·见下图,默认情况下没有选中字段定义和常用的HTML导出,都是使用的时候才进行安装。
2004-3-269:
12:
53
2004-3-269:
14:
302、在Delphi7中引入CrystalReportViewer控件
·启动DelphiIDE,关闭所有文件。
·主菜单Project|ImportTypeLibrary…打开导入类型库。
·选择CrystalReportViewerControl9(Version9.2)。
·选中“GenerateComponentWrapper”复选框,点击Install安装。
2004-3-269:
16:
51
2004-3-269:
17:
09安装成功后在ActiveX组件中看到有CRViewer9组件,直接拖拉到Form中就可以使用了,因为考虑到程序的可控性和扩展性,不推荐这样使用,在次也不做多介绍。
2004-3-269:
19:
53二、CrystalReport9.2VCL的安装1、准备合适的VCL组件
下载和自己开发环境匹配的VCL,例如我们现在所使用的是Delphi7和CrystalReport9,所以选择下载CrystalReports9VCL-supportsDelphi7的VCL,地址:
或者使用CrystalReport9中带有的\ProgramFiles\CrystalDecisions\CrystalReports9\Samples\chs\Code\Delphi\cr85vcl.exe,注意,这个VCL是CrystalReport8.5的,但也可以使用,但最好使用网站提供最新的VCL。
注意:
由于CrystalDecisions被businessobjects收购后,原CrystalReportforDelphiVCL的作者Frank已经不提供VCL的更新(Frank的网站已经不能访问了
http:
//mypage.uniserve.ca/~zimmerman/delphi.htm
),关于最新资料最好到
上查询。
2、安装VCL
·将VCL组件文件解压缩到ProgramFiles\Borland\crystal9_vcl目录下。
·启动DelphiIDE,关闭所有文件。
·主菜单File|Open,打开ProgramFiles\Borland\crystal9_vcl\Delphi7\dcl7cr9.dpk。
·安装组件包
2004-3-269:
21:
00·确认安装成功
2004-3-269:
22:
05·主菜单Tools|EnvironmentOptions…
·编辑库搜索路径
2004-3-269:
23:
13·浏览
2004-3-269:
24:
02·选取crystal9_vcl\Delphi7
2004-3-269:
25:
03·添加
2004-3-269:
26:
17·确认添加
·关闭所有文件,注意不要保存相应的包文件
3、对VCL组件中Demo使用的问题
在使用CrystalReports9VCLforDelphi7时,安装VCL后大家都会去看看VCL里带的例子,但是这些例子经过编译发现不少问题,首先这些例子是在老版本基础上制作的,所以用我们新的VCL和环境编译就会出现错误。
打开ProgramFiles\Borland\crystal9_vcl\Delphi7\Samples\MDI32中的工程,编译发现一系列错误:
错误行:
[red]Crpe1.ExportOptions.FileType:
=ExcelXLS[/red];
原因是新的VCL里的导出文件类型命名进行了修改,而且对支持的格式也有所变化,所以要针对新的导出文件类型要对代码进行修改。
这里的ExcelXLS就需要修改为MSExcel,代码中的LotusWK3格式已经在此VCL里不支持了。
CrystalReports9VCLforDelphi7中支持的格式如下:
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;
修改完保存,然后重新编译ProgramFiles\Borland\crystal9_vcl\Delphi7\dcl7cr9.dpk。
·提示信息汉化的处理
我们在使用的过程中发现,虽然我们用了CrystalReport9.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-269:
30:
16三、利用CrystalReport9VCL编程1、利用VCL编写程序
当我们安装好VCL组件,同时也对VCL中的Demo做了熟悉,下面我们就可以尝试利用VCL组件来编写我们自己的报表系统了。
·新建一个Application,在DataAccessTab中选择Crpe组件,放置到Form中,再放置一个Button按扭,双击Button,编写如下代码:
procedureTForm1.Button1Click(Sender:
TObject);
begin
Crpe1.ReportName:
='C:
\yourreport.rpt';
Crpe1.Execute;
end;
编译代码,执行,点击按扭会打开'C:
\yourreport.rpt报表文件。
对上面代码进行完善一下,例如可以通过打开对话框打开自己想要浏览的报表文件,修改代码如下:
procedureTForm1.Button1Click(Sender:
TObject);
begin
ifOpenDialog1.Executethen
begin
Crpe1.ReportName:
=OpenDialog1.FileName;
try
Screen.Cursor:
=crHourGlass;
Crpe1.Execute;
finally
Screen.Cursor:
=crDefault;
end;
end;
end;
注意在使用TCrpe.Execute时,最好加上try…finally…,对代码进行保护。
CrystalReport9VCL的功能非常强大,通过编程我们可以控制报表的导出,打印和界面显示简单功能,而且也能处理报表中的图表显示,数据字段定义等复杂功能,给我们很大的自由度满足我们的应用需求。
2、简单连接数据源代码实现——只使用Tcrpe32组件就可以满足我们的需求
我们用Access数据表举例,首先我们需要用Access来建立我们需要的数据库表结构,然后用CrystalReport9来创建报表模板(关于如何来制作报表模板不是本文所涉及的内容,读者可以参考CrystalReport9方面的参考资料),然后在我们的代码中加入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-269:
33:
06
2004-3-269:
34:
00·点击Build,弹出数据连接属性,选择MicrosoftJet4.0OLEDBProvider
2004-3-269:
34:
51·下一步,连接选择Access数据表文件dbReport.mdb,确定即可。
2004-3-269:
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(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的使用方法)
fori:
=1to100do
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、处理中遇到的问题
在利用CrystalReportVCL来编写我们的程序的过程中总会遇到这样那样的问题。
例如显示的报表中有超链接,但不能够正常使用,是因为CrystalReport中drilldownevent设置为False,需要代码中设置为True,就可以正常使用了。
withCrpe1.WindowButtonBardo
begin
Visible:
=True;
AllowDrillDown:
=True;
CancelBtn:
=False;
ToolbarTips:
=True;
end;
crpe1.execute
当然我们还会碰到更多棘手的问题,但都是可以解决的,一方面可以查找网站上提供的信息,一方面通过调试修改程序包括VCL。
2004-3-269:
37:
12四、如何发布自己的程序当我们把程序编写完成后,最后的任务是要把我们的程序发布出去,但是由于CrystalReport带有很多库,这样给我们发布程序带来了很多麻烦,使我们发布出去的程序在客户机上功能不能够正常使用,下面就介绍如何发布程序,以及经常会碰到的问题:
1、利用InstallShieldDevStudio9来制作安装程序
在InstallShieldDevStudio9已经带有CrystalReport9的MergeModules,但是那是英文的,不能够满足我们的需要,我们需要下载简体中文的,进行替换。
下载地址:
·下载后解压缩,替代\ProgramFiles\CommonFiles\MergeModules中对应的文件。
·将CrystalReport9-CrystalReportEngineComponents选择加入我们的安装程序中。
·如果使用了TclientDataSet等数据集,那么需要加入midas.dll。
·需要加入crpe32.dll、crpe32_res_chs.dll、gdiplus.dll、commonobjmodel.dll、rptobjmodel.dll、u2fcompress.dll
·更加自己程序功能特性加入其他库文件。
2、运行库说明
虽然CrystalDecisions申明CrystalReportscomponents支持多个版本安装在同一机器上,但不支持这样做,实际应用过程中还是会发生一系列问题。
当发布自己的程序时,依靠CrystalReport运行库主要有以下几个方面:
——访问CrystalReportEngine的方法
——报表所用的数据源
——导出类型支持
——其他功能,如图表、地图、公式的支持。
CrystalReportscomponents中的四个主要器件介绍:
——Craxdrt9.dll——TheCrystalReports9ActiveXDesignerRuntimeDLL.ThisDLListhereportingengineanditexposestheObjectModelHierarchy.DistributethisDLLwithallapplicationsusingtheRDC。
——CRViewer9.dll——TheCrystalReportsViewControl.Usethiscomponenttopreviewyourreport.Ifyouarenotpre
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 在Delphi 中如何使用水晶报表 Delphi 如何 使用 水晶 报表