分享
 
 
 

Crystal Report(水晶报表)的报表封装成VB的DLL

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

Crystal Report(水晶报表)的报表封装成VB的DLL

2003-06-26

前言:

Crystal Report(水晶报表)的设计器在VB中有很好的支持,使用设计器开发报表非常的方便,它不但拥有丰富的获取数据的数据源,还拥有良好的可编程接口的支持,是一般报表开发的首先。然而,由于众所周知的原因,VB的程序编译后很大,如果再加上众多的报表设计器的话(由于报表的格式不同,通常都是一个报表建一个设计器来对应),VB的EXE程序将会越来越大(如果有静态图片的话会更大)。为EXE程序减负的方法之一便是使用ActiveX DLL,使它从EXE程序中分离出去,实现动态加载。这样既减少了EXE程序的体积,又减少了运行时VB程序对内存的占用,同时这种分离能使程序的结构更清晰逻辑更合理。下面这一过程的具体实现。

实现过程:

在开发之前请安装VB6.0的任一版本,并安装好Crystal Report8.5开发版或是专业版。并确认在crystal report安装是选上了Developer Components。

1、 打开VB,新建一ActiveX DLL工程,系统会自动生成一个类Class1,把该类改名为clsCryReport,把系统的工程名也改名为ProjCryReport

2、 单击工程菜单,选“更多ActiveX设计器”,选取“Crystal reports 8.5”,新建一个空的设计器(新建报表时选择“As a Blank Report”)。并将设计器改名为:cryTestDllReport,并将随之新建的一个Form删除(我们不用这DLL的Form来显示报表,而用调用DLL的程序来负责显示报表)。

3、 为报添加数据库源:具体做法是在报表区域点击鼠标右键,选取“DataBase”,选“Add DataBase to Report”,选择“More Data Sources”中的“Active Data”,“Field Definitions Only”,新建一个数据集的字段定义,并将该记录集的定义保存成一个后缀为ttx的文本文件。内容如下:

Staff_id Long

Name String 20

Age Long

Addr String 50

最后将其加入(Add)报表。

4、 把这一些字段排好到设计器的Details区,并根据需要对表头进行设置。

5、 回到clsCryReport,在类中加入如下的代码:

Option Explicit

Dim cry As New cryTestDllReport

Public Sub ShowReport(ByVal frm As Object, ByVal rsCryTestDll As ADODB.Recordset)

'frm是用于传递显示报表的窗体对象的,该窗体需要有Crystal Report的CRViewer控件。

'rsCryTesllDll是报表显示的数据记录集。

cry.Database.SetDataSource rsCryTestDll

frm.CRViewer.ReportSource = cry

frm.CRViewer.ViewReport

End Sub

6、 将该工程编译成DLL文件,文件名为:ProjCryReport.DLL。

7、 新建一VB “标准EXE”工程。

8、 加入“Crystal Report Viewer Control”控件到Form中。把它命名为CRViewer,一定要与上面的名字一致,并通过VB“工程—引用”菜单引用上面我们生成的DLL文件:ProjCryReport.DLL。

9、 添加一按钮cmdShowReport,并在该窗体内写入如下代码:

Option Explicit

Dim cryShow As New clsCryReport '这里是声明一个报表类的对象

Dim cn As New ADODB.Connection '声明一个数据库的连接

Dim rs As New ADODB.Recordset '记录集对象

Private Sub cmdShowReport_Click()

rs.Open "select staff_id,name,age,addr from tbs_staffInfo", _

GetConnection, adOpenDynamic, adLockReadOnly '连接数据库,获取表中的记录。

cryShow.ShowReport Me, rs '调用类中的函数ShowReport,并传递相关的参数。

End Sub

'**

'获取与数据库的连接。

'@return ADODB.Connection.

Public Function GetConnection() As ADODB.Connection

Dim DataBasePassword As String

Dim DataBaseServerName As String

Dim DataBaseUserName As String

On Error GoTo ErrHand

If cn.State = adStateOpen Then

Set GetConnection = cn

Else '从注册表获取连接串。

DataBasePassword = "" '数据库登陆密码,这里为空

DataBaseServerName = "newReport" 'Oracle数据库的服务名

DataBaseUserName = "newReport" 'Oracle数据据库的登录名

cn.ConnectionTimeout = 5

cn.CursorLocation = adUseClient

cn.ConnectionString = "Provider=MSDAORA.1;Password=" + DataBasePassword + ";User ID=" + DataBaseUserName + _

";Data Source=" + DataBaseServerName + ";Persist Security Info=True" '数据库连接字符串。

cn.Open '打开数据连接。

Set GetConnection = cn

End If '结束If Cn.State = adStateOpen

Exit Function

ErrHand:

MsgBox "1.请设置数据服务或检查服务器否正常工作。 " & Chr(13) & "2.网络是否正常工作。" & Chr(13) _

& "3.如果上述问题不能解决问题,敬请与管理员联系。", vbExclamation, "网络连接"

End

End Function

10、单击显示报表,会出现下图的结果。至此我们的报表与EXE程序分离的工作已经完成,只需要把这一个EXE文件编译后就可以分发了。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
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- 王朝網路 版權所有