VB 5.0的report控件在6里可以用什么控件代替

解决方案 »

  1.   

    你说的是DATAreport吧
    你有report的资料吗
    我想看看
      

  2.   

    我看别人的程序
    是以前5.0编写的
    在窗体上有一个report控件
    不知道是什么意思啊 
      

  3.   

    搜索一下啊,我没有
    DataReport使用熟练了很好用的
      

  4.   

      首先介绍一下DataReport对象的几个常用属性。一是DataSource,用于设置一个数据源,通过该数据源,数据使用者被绑定到一个数据库;二是DataMember,从DataSource提供的几个数据成员中设置一个特定的数据成员;三是LeftMargin、RightMargin、TopMargin、BottomMargin等,用于指定报表的左右上下的页边距;四是Sections,即DataReport的报表标头、页标头、细节、页脚注、报表脚注5个区域,如果加上分组(可以有多层分组),则增加一对区域,即分组标头、分组脚注。其中DataSource一般是一个数据环境或是ADODB.Connection类型的变量,而DataMember则对应数据环境中的Command或是ADODB.RecordSet类型的变量,推荐使用数据环境及Command,页边界大家肯定都很清楚,下面我主要介绍以下Sections,这也是DataReport的精髓所在。  Sections是一个集合,您可以为每一个Section指定名称,也可以用其缺省的索引,从上到下依次为1、2…。每个Section均有Height和Visible属性,您可以在一定条件下使一个Section不可见。在Section中可以放置各种报表控件,其中RptLabel、RptImage、RptShape和RptLine可以放在任意的Section中,用于输出各种文字、图形及表格线;RptTextBox只能放在细节中,一般用于绑定输出DataMemeber提供的数据字段;RptFunction只能被放置在分组注脚中,用于输出使用各种内置函数计算出的合计、最大值、最小值、平均值、记数等等。上述报表控件中常用公共属性有用于控制位置及高度宽度的Top、Left、Height、Width和控制可见性的Visible;其中RptTextBox还有DataField、DataMember、DataFormat及Font属性;其他属性不再多说。  然后介绍一下我的使用经验。一是对想控制的报表控件按类型有规律的命名;二是用RptShape的矩形框做表格线框,比用RptLine画框省事多了,只有斜线才使用RptLine;三是报表标题及报表中的表头文字、日期及页码用RptLabel,其中Caption属性支持转义字符,%D为长格式日期,%d为短格式日期,%P为总页数,%p为当前页码;四是对固定报表在设计窗口直接将报表控件摆放到位,对于活报表,应首先考虑报表最大的情形,将足够的控件分别放置在不同区域,位置大小可以不必深究,然后在报表输出前用VBA代码对所有控件的属性进行调整,包括位置、高度、宽度、字体、对齐方式、显示格式、可见性等等,相应的对Section也应根据情况调整其高度和可见性。
    最后用一个实例模板来说明其使用方法。  连接数据库With 数据环境.rsCommand名
    If .State = adStateOpen Then .Close
    .Source = SQL语句
    .Open 打开想输出的数据库数据项以便输出
    End With
    With 报表名
     .DataSource=数据环境
     .DataMember=Command名 这两行也可固定设好而不必每次设置
     设置页表头部分(RpttLabel…为报表控件名)
     .Sections(2).Controls("RptLabelPage").Caption = "共%P页第%p页"
     .Sections(2).Controls("RptLabelDate").Caption = "打印日期:%D"
     .Sections(3).Controls("RptLabel1").Left=…
     …
     设置细节部分(RptShapeX、RptTextBoxX为报表控件名)
     .Sections(3).Controls("RptShape1").Left=…
     .Sections(3).Controls("RptShape1").Top=…
     .Sections(3).Controls("RptShape1").Height=…
     .Sections(3).Controls("RptShape1").Width=…
     .Sections(3).Controls("RptTextBox1").DataMember=Command名
     .Sections(3).Controls("RptTextBox1").DataField=字段1
     .Sections(3).Controls("RptTextBox1").Font.Name=…
     …
     .Sections(3).Controls("RptShapeN").Visible=False
     .Sections(3).Controls("RptTextBoxN").Visible=False
     …
     . Sections(3).Height=计算出的或固定的细节高度
    动态调整报表标题(RptLabelTitle为报表标签控件名)
     .Sections(2). Controls("RptLabelTitle").Left=…
     …
     .Sections(2). Controls("RptLabelTitle").Alignment=…
     …
     调整完毕后
     .Show 或 .PrintReport
    End With水晶报表(Crystal Report)的业内最专业、功能最强的报表系统,它除了强大的报表功能外,最大的优势是实现了与绝大多数流行开发工具的集成和接口。在VS.Net平台做过报表开发的程序员,一定都对水晶报表强大、高效、集成等特性留下了深刻印象。除了开发新程序外,在工作中我们常需要接触到很多较早的软件系统报表功能升级的需求,如果能结合水晶报表这一强大的工具,往往能事半功倍。
    VB是以前流行的数据库开发平台,用其开发的C/S系统在社会上有非常大的保有量,但VB超弱的报表功能往往让程序员面对客户的升级要求一筹莫展。本文并不做水晶报表的使用和编程教学,实际上水晶报表本身的使用方法和VS.Net平台并没有太大的差别,我主要是和大家探讨一下VB和水晶报表的一种较方便的接口方式。我的开发测试平台是Windows2003 Standard简体中文版、VB6.0+sp5英文版、Crystal 9.0简体中文开发版。
    关于在水晶报表中制作报表模板的方法,并非本文的探讨范围,读者可以参考Crystal Report的帮助文件和官方网站的技术资料。简单地说,首先要通过水晶报表的数据库引擎手动连接相应的表结构,制作报表模板,并保存为rpt文件,该项操作和利用VB自带的报表工具制作报表大同小异。
    用VB调用水晶报表进行报表开发的简单接口方法就是,在水晶报表中用"仅字段定义"来获得字段分布文件,用虚拟的文件创建表字段,用CRAXDRT对象来强制改变数据源(ADO.recordset),其效果相当于在VB中调用了rpt文件。下面分步骤介绍编程方法。
    在VB中使用水晶报表的一种简易编程方法
    第一步:
    在VB工程中Project菜单加入"Add Crystal Report 9",报表名使用默认即可。这时Form2(Crystal Rerport自动添加的Form,假设名为Form2)被自动分配了如下代码:
    Option Explicit
    dim Report as New Cystal1
    Private Sub Form_Load()
    Screen.MousePointer = vbHourglass '调用水晶报表时置鼠标为沙漏状
    CRViewer91.ReportSource = Report '该语句的赋值将在后面被修改
    CRViewer91.ViewReport
    Screen.MousePointer = vbDefault '调用水晶报表完成后置鼠标为默认形状
    End Sub
    Private Sub Form_Resize()
    CRViewer91.Top = 0
    CRViewer91.Left = 0
    CRViewer91.Height = ScaleHeight
    CRViewer91.Width = ScaleWidth
    End Sub
    第二步:
    点击Crystal Report设计器的"数据库字段",选定"数据库专家...",然后点"创建新连接",再点"仅字段定义",创建"数据库定义"文件,字段名和宽度和原数据库表保持一致。最后,在数据库字段中获得了相应字段,将其置于报表上,按水晶报表的要求配置。
    第三步:
    该步骤非常关键,添加一个Modual到工程文件中,定义全局的ADODB变量,实现数据库和水晶报表的动态连接。代码如下:
    Public conn As New ADODB.Connection
    Public rs As New ADODB.Recordset
    第四步:
    关于VB程序的ADO数据库连接注意事项,请看下面的打印按钮例程。
    Private Sub Command1_Click()
    Dim connstr As String
    If conn.State = adStateOpen Then conn.Closeconnstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\prtest.mdb;Persist Security Info=False" 'prtest.mdb是程序当前目录的测试Access数据库conn.ConnectionString = connstrconn.Open conn.CursorLocation = adUseClient If rs.State = adStateOpen Then rs.Closers.Open "test", conn, adOpenKeyset, adLockReadOnly' Report.Database.SetDataSource rs, 3, 1 '此行取消
    Form2.Show 1 '数据库连接完成后,调用Form2水晶报表工程
    End Sub
    需要提请大家注意的是,上面代码中的Report.Database.SetDataSource rs, 3, 1是初用水晶报表的程序员容易犯的错误,使用该语句后将造成数据库和水晶报表的连接失败。如何动态调用水晶报表呢?请看第五步。
    第五步:
    创建水晶报表和数据库数据源的连接,需要修改上面Form2的代码。
    Option Explicit
    'dim Report as New Cystal1
    '上面一行取消
    Private Sub Form_Load()
    Dim oApp As New CRAXDRT.Application
    Dim oRpt As CRAXDRT.Report
    Dim reportName As String
    '上面三行是新增加的
    Screen.MousePointer = vbHourglassreportName = "\rpt\Pr1.rpt"   '定义要引用的rpt文件
    Set oRpt = oApp.OpenReport(App.Path & reportName, 1)
    oRpt.Database.SetDataSource rs '连接水晶报表和数据源
    oRpt.ReadRecords
    CRViewer91.ReportSource = oRpt '启用水晶报表的预览功能
    CRViewer91.ViewReport
    Screen.MousePointer = vbDefaultEnd Sub
    Private Sub Form_Resize()
    CRViewer91.Top = 0
    CRViewer91.Left = 0
    CRViewer91.Height = ScaleHeight
    CRViewer91.Width = ScaleWidth
    End Sub
    Private Sub Form_Unload(Cancel As Integer)'Set Report = NothingSet rs = NothingSet conn = NothingUnload Form2End Sub
    上面介绍了在VB中使用水晶报表进行报表开发的一种方法,该方法简单易用,适合初学者上手。大家熟悉以后,还可以继续学习Crystal Report提供的API函数(Lib库 Crpe32.dll)进行水晶报表开发,可以获得更大的灵活性。
      

  5.   

    我现在就是要用datareport来做的
    原来的程序打不开了
    看不懂事什么意思