分类: 数据库开发技术
2007-04-23 11:20:07
实现过程:
在开发之前请安装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文件编译后就可以分发了。