开发环境为vb6.0和水晶报表9.2Set objCRReport = objCRApp.OpenReport(App.Path & "\Report\Report3.rpt", 1)’数据源在 
                          Report3.rpt这个文件里面指定的
objCRReport.Database.SetDataSource Recordset‘Recordset为查询出来的数据
CRViewer91.ReportSource = objCRReport
CRViewer91.ViewReport如果数据源的位置发生变化,就会出现找不到数据源的错误请问怎么实现动态设置数据源

解决方案 »

  1.   

    如果数据源发生变化,那你的程序呢???
    你程序一运行,就固定数据源了呀或许不懂你的意思你可以用objCRReport.Database.SetDataSource "数据源","表","用户名","密码"
      

  2.   

    objCRReport.Database.SetDataSource Recordset‘Recordset为查询出来的数据
    我后面跟的是一个结果集RecordsetSet objCRReport = objCRApp.OpenReport(App.Path & "\Report\Report3.rpt", 1)’数据源在Report3.rpt这个文件里面指定的,是用水晶报表工具直接打开的数据源指定错误的时候,程序回报错,运行不了
      

  3.   

    strtemp = "driver={SQL server};server=" + cDB.prSQLSvrName + _
            ";uid=" uid ";pwd=" pwd ";database=yourdb".Connect = strtemp
      

  4.   

    Private objCRApp As New CRAXDRT.Application    '水晶报表应用程序对象
    Private objCRReport As New CRAXDRT.Report             '报表对象
    Dim rs As ADODB.Recordset
    Dim msgtext As StringPrivate Sub cmdsearch_Click()  '清除报表中保持的数据
      objCRReport.DiscardSavedData
      '形成数据集
      '单个表适合用sql语句
      strsql = "select * from clerk where clerk_bm='" & Combo1.Text & "'"
      '多个表筛取数据 必须要用视图,水晶报表不能用sql语句
      'strsql = "select * from clerk_organ_view where clerk_bm='" & Combo1.Text & "'"
      Set rs = ExecuteSQL(strsql, msgtext)
      '赋给报表数据
      objCRReport.Database.SetDataSource rs
      CRViewer91.ReportSource = objCRReport  '指定报表来源
      CRViewer91.ReportSource = objCRReport
      '显示报表
      CRViewer91.ViewReport
    End SubPrivate Sub Form_Load()
      Dim strsql As String
      strsql = "select distinct clerk_bm from clerk"
      Set rs = ExecuteSQL(strsql, msgtext)
      Do While Not rs.EOF
         Combo1.AddItem rs(0)
         rs.MoveNext
      Loop
      
      '加载报表模板
      '单个数据表形成的报表
      Set objCRReport = objCRApp.OpenReport(App.Path & "\1.rpt", 1)
      '多个数据表形成的报表
      Set objCRReport = objCRApp.OpenReport(App.Path & "\2.rpt", 1)
      
    End SubPrivate Sub Form_Resize()
    '  CRViewer91.Top = 50
    '  CRViewer91.Left = 0
    '  CRViewer91.Height = ScaleHeight - Combo1.Height
    '  CRViewer91.Width = ScaleWidth
    End Sub
      

  5.   

    我是菜鸟,刚学VB
    请问下,*.rpt这个是什么形成的还有Set rs = ExecuteSQL(strsql, msgtext)能解释下这是?
      

  6.   

    *.rpt 就是你安装水晶报表后,设计的一个报表,类似1.doc
    Set rs = ExecuteSQL(strsql, msgtext)
    我这里用ado 你应该知道吧
    记得在工程/引用中引用ado
    将下面的代码放到类模块中
    Dim msgtext As String
    Dim mrc As ADODB.RecordsetPublic Function ExecuteSQL(ByVal sql As String, MsgString As String) As ADODB.Recordset
        Dim cnn As ADODB.Connection
        Dim rst As ADODB.Recordset
        Dim sTokens() As String
        'Dim SQL As String
        On Error GoTo ExecuteSQL_Error
        sTokens = Split(sql)
        Set cnn = New ADODB.Connection
        cnn.Open GetDatabaseConnectionString
        If InStr("INSERT,DELETE,UPDATE", UCase$(sTokens(0))) Then
           cnn.Execute sql
           MsgString = sTokens(0) & "query successful"
        Else
           Set rst = New ADODB.Recordset
           rst.Open Trim$(sql), cnn, adOpenKeyset, adLockOptimistic
          
           
           Set ExecuteSQL = rst
            
           MsgString = "查询到" & rst.RecordCount & "条纪录"
        End If
    ExecuteSQL_Exit:
        Set rst = Nothing
        Exit Function
        Set cnn = Nothing
    ExecuteSQL_Error:
        MsgString = "查询错误:" & Err.Description
        Resume ExecuteSQL_Exit
    End FunctionPublic Function GetDatabaseConnectionString() As String
        '不打包时,用自己的数据库
        GetDatabaseConnectionString = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;password=password;Initial Catalog=DQYT;Data Source=13.1.1.66"
        '打包时需要用下面的
        'GetDatabaseConnectionString = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;password=kingland;Initial Catalog=DQYT;Data Source=13.1.1.69"
    End Function
      

  7.   

    如此操作简单一些:将你的rpt文件添加到你的VB工程中,然后在你的窗体中使用该文件。即可。
    如下面的程序,crtXSCJD是添加rpt文件后形成的一个设计器文件。Private rsXSCJ As New ADODB.Recordset
    rsXSCJ.Open "查询语句", dataCn.ConnectionString, adOpenStatic, adLockReadOnly, _
           adCmdText'指定报表来源
     crtXSCJD.DiscardSavedData
     crtXSCJD.Database.SetDataSource rsXSCJ
     CRViewer91.ReportSource = crtXSCJD
     
    '显示报表
     CRViewer91.ViewReport
     CRViewer91.Refresh
     Picture1.Visible = False