RS :符合条件的数据(recordset)
Set DataReport1.Datasource = RS
DataReport1.show
报表能显示数据。但要对报表进行分组统计应如何实现?请高手帮忙!

解决方案 »

  1.   

    用RptFunction控件,跟RptTextBox控件一样邦定Recordset字段
      

  2.   

    你是用什么来做报表的,VB自带的还是crystal report,它们都本身有报表分组功能啊
      

  3.   

    比如你要按窗体Form1上的Text1中输入的iName来分组:
      添加DataReport。在分组标头中添加2个RptTextBox控件,它们的DataField属性设为iName,S_iName(统计iName相关数据的数量);细节中用RptTextBox控件按自己的打印要求布局,将它们的DataField属性分别对应相应的字段,并设置细节中的DataMember为你的分组名称,比如miCmd。注意不要设置分组标头中RptTextBox控件的DataMember,双击DataReport,添加代码如下:Private Sub DataReport_Initialize()
        Dim cn As ADODB.Connection
        Dim rs As ADODB.Recordset
        Dim Sql,txtSql As String
        
    '连接数据库(Access)
        Set cn = New ADODB.Connection
        With cn
            .Provider = "MSDataShape.1" '一定要加这句
            .Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
            "Data Source=" & App.Path & "\db1.mdb;" & _
            "Persist Security Info=False"
        End With
        
    '组合查询语句:
        Sql = "SELECT * FROM `TableName`" & _
            "where iName ='" & Form1.Text1.text & "'"
      (这里注意TableName不是用单引号括起来的,而是用Tab键上方的那个带~的
    键上的`括起来的,后面有类似的地方,自己注意了)
        
    '打开查询记录集
      txtSql = "SHAPE {" & Sql & " } " & _
            "AS miCmd COMPUTE miCmd, COUNT(miCmd.'iName') " & _
            "AS S_iName BY 'iName' "
      Set rs = New ADODB.Recordset
        rs.Open Sql, cn, adOpenStatic, adLockReadOnly    Set Me.DataSource = rs
    End Sub
    在Form1上建一个确定按钮,在单击事件中添加代码:
      DataReport.Show
    DataReport不好用,建议改用ActiveReport