VB6中使用水晶报表输入数据库中的记录

作者在 2010-06-12 12:08:51 发布以下内容
      本文非粘贴或抄袭,但技术主要学习自阿泰的文章:(向阿泰致谢)。
      水晶报表比VB6自带的报表工具DataReport要好的多,无论从功能或是界面上都有很大的优越性。VS.NET中已经集成了CrystalReport,本文则主要说明如何在VB6中使用CrystalReport.
      测试环境:VB6.0中文企业版+CrystalReport11.5(XI Release2),在VB6中引用Crystal ActiveX Report Viewer Library 11.5。添加报表控件。
      水晶报表获取数据据的方法有两种,称为拉模式和推模式。拉模块是直接连接数据库并把数据传给报表控件,推模式是指使用数据对象如ADO生成记录集,然后将记录集传给报表控件。使用推模式报表不必依赖于数据源,更灵活一些。在编写代码之前,可以先设计报表的模板。
模板设计:
      打开CrystalReport,新建空白报表,出现数据库专业对话框/创建新连接/仅字段定义,在出现的对话框中可以选择字段定义文件,或者定义新文件。(也可以以同样的结构,用记录本创建该TTX文件)。剩下的操作就是设置模板中字段的布局,合理使用组专家、节专家和排序专业工具对生成的报表进行定义。
     需要注意的是,定义的TTX字段结构,应与要传递数据的记录集的结构保持一致。
     保存报表模板和TTX字段定义文件。下面的代码演示了如何用ADO数据集生成报表。
Option Explicit
Private objCRApp As New CRAXDRT.Application    '水晶报表应用程序对象
Private objCRReport As New CRAXDRT.Report             '报表对象
'
======================================================
Private Sub Form_Load()
    Dim i As Integer
    Dim conn As New ADODB.Connection
    Dim rst As New ADODB.Recordset
    Dim strsql As String    
    Dim str1 As String      
    Dim str2 As String      
    Dim str3 As String      
    str1 = "Provider=Microsoft.Jet.OLEDB.4.0;"      
    str2 = "Data Source=" & fname & ";"      
    str3 = "Jet OLEDB:Database Password="
    conn.Open str1 & str2 & str3
    
    strsql = "select 单位,姓名,性别 from student"
    rst.CursorLocation = adUseClient
    rst.Open strsql, conn, 3, 3                   '记录集已打开
  
    Dim props As CRAXDRT.ConnectionProperties     '报表数据源参数集
    Dim prop As CRAXDRT.ConnectionProperty        '报表数据源参数

'--------------------------------------------------
    '创建报表
    '--------------------------------------------------
    '加载报表模板
    Set objCRReport = objCRApp.OpenReport(App.Path & "\rpt1.rpt", 1)
    '加载报表字段定义文件
    Set props = objCRReport.Database.Tables(1).ConnectionProperties
    For Each prop In props
        If InStr(prop.Name, "Field Definition File") > 0 Then
           prop.Value = App.Path & "\test1.ttx"
           Exit For
        End If
    Next
    Set props = Nothing
    '清除报表中保持的数据
    objCRReport.DiscardSavedData


    '赋给报表数据
    objCRReport.Database.SetDataSource rst
    '--------------------------------------------------
    '进行报表显示外观设置
    '--------------------------------------------------
        
    objCRReport.LeftMargin = 10
    objCRReport.RightMargin = 10
    CRViewer91.EnableExportButton = True            '导出按钮
   ' CRViewer91.EnableSelectExpertButton = False
   ' CRViewer91.DisplayGroupTree = False             '不显示组树
   ' CRViewer91.EnableAnimationCtrl = False
   ' CRViewer91.EnableCloseButton = False
   ' CRViewer91.EnableGroupTree = False
   ' CRViewer91.EnableHelpButton = False
    CRViewer91.EnableRefreshButton = False
   ' CRViewer91.EnableNavigationControls = False
   ' CRViewer91.EnablePopupMenu = False
   ' CRViewer91.EnableSearchControl = False
   ' CRViewer91.EnableSearchExpertButton = False
   ' CRViewer91.EnableSelectExpertButton = False
   ' CRViewer91.DisplayTabs = False
    
    '指定报表来源
    CRViewer91.ReportSource = objCRReport
    '显示报表
    CRViewer91.ViewReport
    Set rst = Nothing
End Sub

'截获打印事件
Private Sub CRViewer91_PrintButtonClicked(UseDefault As Boolean)
    Dim lngRet As Long
    '不使用默认设置
    UseDefault = False
    '进行打印机设置
    objCRReport.PrinterSetup Me.hWnd
    '直接打印(注意True/False的设置,主要是为了控制前一对话框取消的情况)
    objCRReport.PrintOutEx True
End Sub


Private Sub Form_Resize()
On Error Resume Next
    CRViewer91.Left = 200
    CRViewer91.Width = Me.Width - 500
    CRViewer91.Height = Me.Height
End Sub
加载图片:
     如果在数据库中存储了图片,如ACCESS中,用OLE对象(二进制),或SQL数据库中的image,可以在TTX字段定义文件中用BLOB(二进制大型对象) 定义相应的字段,那么在模板中可以直接把这个字段以照片的格式拖出来。生成记录集的时候该字段的查询与其它类型的字段是一样的。
VB6技术学习 | 阅读 5674 次
文章评论,共2条
源本英明C
2010-06-17 13:39
1
自己写的吗?
wei855198(作者)
2010-06-18 15:33
2
算是总结的吧,跟阿泰学的。
游客请输入验证码
浏览95081次
最新评论