用VB自带的datareport实现报表的制作和打印,现在遇到个问题:每天的报表(日报表)将每笔记录显示,最后有个总计。每月的报表(月报表)将日报表的总计显示出来,最后有个当月的总计。年报表将每月的总计显示出来,最后有个当年的总计。日报表我能做出来,但不知道月表和年表怎样做。请行家给些详细的启示。

解决方案 »

  1.   

    可以用一个字段做月份或年份的合计,或者用记录集
    把datareport中的控件绑定到对应字段
      

  2.   

    用分组的记录集,代码可以参考下面:ADODB.Connection对象属性的设置。
    错误的设置是
    conn.Provider = "SQLOLEDB.1"
    conn.ConnectionString = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=mytest;Data Source=SUNRY"这个Provider不支持“shape”关键字,必须用下面来设置:
    conn.Provider = "MSDataShape"
    conn.ConnectionString = "PROVIDER=MSDataShape;DATA PROVIDER=SQLOLEDB;" & _
            "SERVER=;DATABASE=mytest;UID=sa;PWD=;"这样设置就可以支持“shape”关键字。
    然后用下面的语句可以生成多重数据集:
        Dim sqlOne As String
        Dim sqlTwo As String
        Dim sqlstr As String
        sqlOne = "Select 资料类型,归档日期,count(*) as DayTotal from index1 group by 资料类型, 归档日期 order by 资料类型,归档日期"
        sqlTwo = "SHAPE {" & sqlOne & "}" & _
                " as kkk COMPUTE kkk, sum(kkk.DayTotal) as SubTotal by 资料类型"
        sqlstr = "SHAPE (" & sqlTwo & ")" & _
                " as eee COMPUTE eee, sum(eee.SubTotal) as Total "
              
        rsParent.StayInSync = False
        rsParent.CursorLocation = adUseClient
        rsParent.Open sqlstr, conn
        rsParent.Requery
        
        Set DRDatumType.DataSource = rsParent    'rsParent是一个ADODB.Recordset对象    DRDatumType.Sections.Item("DatumType_Detail").Controls.Item("txtType").DataField = "资料类型"
        DRDatumType.Sections.Item("DatumType_Detail").Controls.Item("txtDate").DataField = "归档日期"
        DRDatumType.Sections.Item("DatumType_Detail").Controls.Item("txtDayToal").DataField = "DayTotal"
        DRDatumType.Sections.Item("DatumType_Detail").Controls.Item("txtType").DataMember = "kkk"
        DRDatumType.Sections.Item("DatumType_Detail").Controls.Item("txtDate").DataMember = "kkk"
        DRDatumType.Sections.Item("DatumType_Detail").Controls.Item("txtDayToal").DataMember = "kkk"
       
        DRDatumType.Sections.Item("DatumType_SubTotal_Footer").Controls.Item("txtSubTotal").DataField = "SubTotal"
        DRDatumType.Sections.Item("DatumType_SubTotal_Footer").Controls.Item("txtSubTotal").DataMember = "eee"
        DRDatumType.Sections.Item("DatumType_Total_Footer").Controls.Item("txtTotal").DataField = "Total"
             
        DRDatumType.Show 1