我现在将数据库的服务器名保存在一个变量中,现在想在程序中动态设置水晶报表的数据源,怎么做啊?

解决方案 »

  1.   

    水晶报表的连接数据源是程序传进去的,程序你可以写好。用全局变量就可以了这其实和水晶报表没任何关系,水晶报表的字段你可以使用ttx文件,最好不要使用水晶报表自身的ado
      

  2.   

    给你看看我的程序,我就是用动态数据源,水晶报表8.0
    窗体代码
    Dim rs As ADODB.Recordset
    Dim Report As New CrystalReport1
    Dim msgtext As String
    Private Sub Form_Load()
      Dim strsql As String
      strsql = "select * from dw_table where dw_bm='" & Form2.Text1.Text & "'"
      Set rs = ExecuteSQL(strsql, msgtext)
      Report.Database.SetDataSource rs
      
      CRViewer1.ReportSource = Report
      CRViewer1.ViewReport
      Screen.MousePointer = vbDefault
      
    End SubPrivate Sub Form_Resize()
      CRViewer1.Top = 0
      CRViewer1.Left = 0
      CRViewer1.Height = ScaleHeight
      CRViewer1.Width = ScaleWidthEnd SubPrivate Sub Form_Unload(Cancel As Integer)
      Set Report = Nothing
    End Sub类模块代码也就是ExecuteSQL函数
    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 ConnectString
        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 ConnectString() As String
        ConnectString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\计划管理系统.mdb;Persist Security Info=False"
    End Function