1.先在水晶的设计器中直接连接 access 数据库用向导方式制作报表,
  并存为不带数据的 Report.rpt文件.2.在VB中,添加 CrystalReport1.Dsr 设计器, 添加时选择"来自现有的报表",选择打开 Report.rpt3. 然后   CRViewer91.ReportSource = Report
          CRViewer91.ViewReport
   就可以显示了.  问题是这个 Report.rpt 报表是直接连到数据库的, 我想用 ADO 数据作报表的数据源怎么做?翻了旧贴子和水晶带的些例子,不太懂, 乱试如下:Dim rst As New ADODB.Recordset
Dim RptRe As New CrystalReport1
Dim Sql As String
Dim  pathstr As Stringpathstr = App.Path & "\temp\Report.rpt"Sql = "SELECT * FROM main"rst.CursorLocation = adUseClient
rst.Open Sql, conn, adOpenDynamic, adLockOptimisticRptRe.Application.OpenReport pathstrRptRe.Database.SetDataSource rstWith Me.CRViewer91
.ReportSource = RptRe
.ViewReport
.Zoom 100
End With当然不行, 运行到 RptRe.Database.SetDataSource rst  这行就说类型不匹配
就是没个概念... 求助,没多少分了,大家帮帮忙,谢谢!

解决方案 »

  1.   

    把RptRe.Database.SetDataSource rst  
    改成:
    For i = 1 To RptRe.Database.Tables.Count                          '设置报表的数据源
    If RptRe.Database.Tables.Item(i).Name = "carsort" Then           '把carsort改成你建报表时用到的表名
    RptRe.Database.Tables(i).SetDataSource rs
    End If
    Next
      

  2.   

    把RptRe.Database.SetDataSource rst  
    改成:
    For i = 1 To RptRe.Database.Tables.Count                          '设置报表的数据源
    If RptRe.Database.Tables.Item(i).Name = "carsort" Then           '把carsort改成你建报表时用到的表名
    RptRe.Database.Tables(i).SetDataSource rst
    End If
    Next
      

  3.   

    Dim RptRe As New CrystalReport1
    Adodc1.ConnectionString="连接字符串"
    Adodc1.RecordSource = "select * from main"
    Adodc1.Refresh
    CrystalReport1.Database.SetDataSource Adodc1.Recordset
    CrystalReport1.DiscardSavedData
    Screen.MousePointer = vbHourglass
    CRViewer91.ReportSource = CrystalReport1
    CRViewer91.ViewReport
    Screen.MousePointer = vbDefault
      

  4.   


    RptRe.Application.OpenReport pathstr
    RptRe.Database.SetDataSource rst
    前面加一行:
    Set RptRe = Nothing 看可以不?我连的是sql的数据库,但可以,我的如下:Dim Report As New CrystalReport1Private Sub Form_Load()
    Set Report = Nothing
    Report.Database.SetDataSource rs
    Screen.MousePointer = vbHourglass
    CRViewer1.ReportSource = Report
    CRViewer1.ViewReport
    Screen.MousePointer = vbDefaultEnd Sub里面的rs相当于你的rst
      

  5.   

    to bingge(兵哥) :我要叫你大哥了,Set Report = Nothing之后
    Report.Database.SetDataSource rs 这个怎么执行啊
      

  6.   

    谢谢各位 ,   引用 myhgyp(也许是这样的,信不信由你) 
    把RptRe.Database.SetDataSource rst  
    改成:
    For i = 1 To RptRe.Database.Tables.Count       '设置报表的数据源
    If RptRe.Database.Tables.Item(i).Name = "carsort" Then  '把carsort改成你建报表时用到的表名
    RptRe.Database.Tables(i).SetDataSource rst
    End If
    Next可是我的查询字串不是查一个表的呀,有链接几个表的查询语句
      

  7.   

    RptRe.Database.SetDataSource rst,3,1
      

  8.   

    RptRe.Database.SetDataSource rst,3,1
    这是vb6.0动态调用水晶报表的唯一方法,如果采用动态,那么就不依赖任何原始数据源了
      

  9.   

    还是不成啊,老是说 下标越界,    设计的时候是在设计器里直接连 access 文件, 在三个表里选了几个字段, 
     
       现在想用 ado 作数据源, 好像用查询语句不行的