游武汉科学技术馆作文:VB如何调用Crystal Reports

来源:百度文库 编辑:偶看新闻 时间:2024/04/28 16:48:01

VB如何调用Crystal Reports

shkingdee

在VB中利用Crystal ActiveX控件制作报表
在自行开发的应用软件中,一般都需要制作报表。我们可以利用Crystal
Reports(也称水晶报表)方式,调用Print方法直接输出,通过其他(
TextBox等)控件输出报表,使用OLE技术与Word和Excel连接输出报表。Crystal
Reports方式需要许多文件支持,通常需要耗用更多的系统资源,但与其他方法
相比,具有容易实现、功能强大、报表样式丰富的特点。
  用Crystal ActiveX控件制作报表一般有两种方法:
  1. 直接使用Crystal ActiveX控件生成报表。
  2. 先用CRW32.EXE产生RPT报表文件,然后在控件中引用RPT文件。
  常用报表大约有:列表式的报表;带有分类、汇总式的报表;以及带有各种
图形、图表的报表。下面就这两种方法举例说明几种报表的制作。
  一、 直接使用Crystal ActiveX控件生成报表
  使用Crystal ActiveX控件应先建立数据库,Crystal ActiveX控件支持流行
的数据库类型,如:Access、xBase、Paradox。直接使用Crystal ActiveX 控件
只能制作简单的列表式报表。
  1. 新建一个工程,在窗体Form1上添加Data 控件,Crystal ActiveX控件,
命令按钮。
  2. 在Data 控件上将DatabaseName 属性设置为要生成报表的数据库名称,
如Biblio.mdb。
  设置 RecordSource 属性为数据库中表名称或SQL查询语句。这里我们设置
成表Authors。
  3. 在Crystal ActiveX控件上设置 DataSource 属性为Data1,设置
ReportSource 属性为3。
  ReportSource 属性:
   0 - 使用RPT报表文件;
   1 - 绑定到TrueGrid控件 ;
   3 - Data 控件所有的 Fields。
  设置Destination属性为0。
  Destination 属性:
   0 - 输出到窗口;
   1 - 输出到打印机;
   2 - 输出到文件;
   3 - 通过MAPI Email将报表发送到别处;
   4 - 通过VIM Email将报表发送到别处。
   若使用属性2,需要设置PrintFileName、
   PrintFileType等相关属性。
   若使用属性3、4,需要设置EMailToList、EMailCCList、EMailMessage等相关属性。
   设置WindowState 属性为2。
  WindowState 属性:
   0 - 打印窗口正常方式;
   1 - 打印窗口最小化;
   2 - 打印窗口最大化。
  4. 对于报表的激活,Crystal ActiveX 控件提供两个途径:属性Action等
于1;或者使用PrintReport方法。PrintReport方法可以返回错误代码,以便于
进行错误处理。
  在按钮上增加代码
   Private Sub Command1—Click()
   CrystalReport1.Action = 1
   End Sub
   代码也可以写成:
   Private Sub Command1—Click()
   Dim Result%
   On Error GoTo Err—handler
  Result% = CrystalReport1.PrintReport
   Err—handler: 
   Select Case Result%
   Case 20xxx:
   ′此处错误处理
   End Select
   End Sub
  错误处理,可参阅水晶报表CRW32.EXE帮助→DEVELOPER→The Crystal ActiveX
Control→Error Messages。该处提供详细的错误信息以及出错原因。
  运行程序,单击命令按钮,就可预览、打印按列列表的报表了。
  二、 使用RPT报表文件制作报表
  使用报表文件(*.RPT)可以制作前文所述的三种报表。推荐使用这种方法制作
报表。用这种方法时,首先要制作一个报表文件。可以先用报表文件生成向导产生
一个大概的轮廓来,然后再修改报表文件使其符合要求。
  制作报表文件
  1. 运行水晶报表CRW32.EXE。
  在File→Options→Fonts中设置报表文件的标题、页首、页脚、细目处的字型。
  在File→Options→Fields中设置字串、数字、货币、日期、布尔型Fields的格式。
  2. 单击菜单File→New运行报表文件生成向导。
  3. 选取Standard标准格式。
  Step1:Tables 单击Data files,选取VB自带的数据库Biblio.mdb,单击Done按
钮,数据库中表项出现在右边列表框中,然后自动进入Step2。
  Step2:Links 单击Next>>按钮。
  Step3:Fields 报表文件可以使用数据库表中的Fields,也可以使用数据库表
Fields的运算结果(Formula)作为报表文件的列。我们先选取左边Datebase Fields
列表框里Authors表中Au—ID、Author、Year_born增加到右边Report Fields列表
框中,可以在Column Heading中修改Fields的标题。接下来要增加一个Formula,
单击Formula按钮,给公式取名f1,在Formula Text中输入{Authors.Au_ID} + 10,
单击Accept按钮,左边Datebase Fields列表框中出现@f1,把@f1添加到右边Report
Fields列表框中,然后单击Next>>按钮。
  Step4:Sort 选择Authors .Au—ID 排序并分组。排序次序和排序项可以在程序
里修改。单击Next>>按钮。
  Step5:Totle 选择一个Field进行统计,例如:小计、合计、计算平均值、个数
等。这里我们不做统计,可以将Totle Fields中的值全部移去。
  Step6:Select 在这里我们可以筛选数据库中的记录,假如需要使Au_ID大于500
的记录才出现在报表里,我们可选择Authors.Au—ID项,然后选择is →greater than
→ 500。注意:记录的选择也可以在程序里修改。单击Next>>按钮到下一步。
  Step7:Style 选择报表文件的样式,这里我们选择Table类型。点击图片按钮还
可以给报表加些图片,在Title后输入报表标题,至此报表初步制作完成。单击Preview
Report按钮可以预览报表了。
  4.单击Design标签进入设计模式。在设计模式中我们可以做修改调整,完成最终
的报表。Click选择一项,Shift+ Click选择多项。修改时应充分利用鼠标右键功能。
最后将报表文件存为test.rpt。
  带有图表的报表文件制作步骤与上面所述相似,在此不做详细叙述。
  报表文件制作完毕,我们就可以在Crystal ActiveX 控件中引用了。
  在Crystal ActiveX 控件中引用报表文件
  1. 新建一个工程,在窗体Form1上添加Crystal ActiveX 控件,命令按钮。
  2. 在Crystal ActiveX 控件上设置ReportSource 属性为0,设置ReportFileName
为制作完的报表文件test.rpt,设置WindowState 属性为2。
  3. 在按钮上增加代码:
  Private Sub Command1—Click()
   Dim Result%
   On Error GoTo Err—handler
   CrystalReport1.SortFields(0) = ″-{Authors.Au_ID}″
   ′将Authors.Au_ID按顺序排列
   CrystalReport1.GroupSelectionFormula = ″{Authors.Au_ID} in 100 to 1000″
   ′筛选Authors.Au—ID为100至1000的记录
   Result% = CrystalReport1.PrintReport
  Err—handler:
   Select Case Result%
   Case 20xxx:
   ′此处错误处理
  End Select
  End Sub


例:
Private Sub Form_Load()
Dim capp As New CRAXDRT.Application
Dim crp As New CRAXDRT.Report
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim i As Integer
If cn.State = adStateOpen Then cn.Close
With cn
.Provider = "MSDASQL.1"
.ConnectionString = "Persist Security Info=True;User ID=SA;Data Source=plans;Initial Catalog=plan"
.Open
End With
If rs.State = adStateOpen Then rs.Close
‘rs.Open "select * from apb where zdph like ‘14%‘ ", cn, adOpenKeyset, adLockOptimistic
Set crp = capp.OpenReport(App.Path & "\report1.rpt")
‘For i = 1 To crp.Database.Tables.Count
‘ If crp.Database.Tables.Item(i).Name = "ado" Then
‘ crp.Database.Tables(i).SetDataSource rs
‘ End If
‘Next i
‘crp.Database.SetDataSource rs
CRViewer1.ReportSource = crp
CRViewer1.ViewReport

End Sub

Private Sub Form_Resize()
CRViewer1.Top = 0
CRViewer1.Left = 0
CRViewer1.Height = ScaleHeight
CRViewer1.Width = ScaleWidth
End Sub