Question Change Datasource in CrystalReport

remya1000

Well-known member
Joined
Mar 29, 2007
Messages
122
Programming Experience
Beginner
I'm using VB.NET 2003 windows application.

i'm trying to display Crystal Reports using CrystalReportViewer.

Code i'm using to display "ZTab.rpt" in CrystalReportViewer when Form_Load

VB.NET:
    Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

            CrystalReportViewer1.ReportSource = "ZTab.rpt"
            CrystalReportViewer1.Zoom(1)

    End Sub

i have checkbox that contain list of crystal report. if i select one crystal report and hit button "Run", it displays that crystal report.

Code i'm using to display another (differenet) crystal report in CrystalReportViewer when Button (btnRun) clicked.

VB.NET:
    Private Sub btnRun_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRunNow.Click

        CrystalReportViewer1.ReportSource = combobox1.SelectedItem
        CrystalReportViewer1.Zoom(1)

    End Sub

so when Form_load, it displays "ZTab.rpt" and when i select one crystal report in combobox and hit button "Run", it displays corresponding crystal report. that works fine.

how can i change the datasource of a report during run time using codes (programming).

for example: if we are using datasource "work.mdb" for "ZTab.rpt" when form_load. when i hit a button, how come i change the datasource to "Employee.mdb" for "ZTab.rpt" during run time using codes. so when form_load it will display ZTab.rpt with datasource "work.mdb" and when i hit a button, it will display ZTab.rpt with datasource "Employee.mdb".

If you have any idea how to do this, please help me. if you can provide an example then it will be great help for me.

Thanks in advance.
 
This code works for me. Hope this helps someone...

VB.NET:
    Dim myreport As New ReportDocument
    Dim strDSN As System.String
    Dim strDB As System.String
    Dim strUID As System.String
    Dim strPWD As System.String

   Private Sub frmMain_Load(ByVal sender........
           CrystalReportViewer1.ReportSource = "ZTab.rpt"
   End Sub

   Private Sub btnChangeDataBase_Click(ByVal sender ........        
        strNewPath = "C:\Projects\Employee.mdb"
        myreport.Load("ZTab.rpt")
        SetupReport(myreport)
   End Sub

   Private Function SetupReport(ByRef objCrystalReportDocument As CrystalDecisions.CrystalReports.Engine.ReportDocument) As System.Boolean

        Dim crTableLogOnInfo As CrystalDecisions.Shared.TableLogOnInfo
        Dim crDatabase As CrystalDecisions.CrystalReports.Engine.Database
        Dim crTables As CrystalDecisions.CrystalReports.Engine.Tables
        Dim aTable As CrystalDecisions.CrystalReports.Engine.Table
        Dim bTable As CrystalDecisions.CrystalReports.Engine.Table
        Dim blnTest As System.Boolean
        Dim strLocation As System.String
        
        crDatabase = objCrystalReportDocument.Database
        crTables = crDatabase.Tables

        For Each aTable In crTables
            crTableLogOnInfo = aTable.LogOnInfo

            strDSN = crTableLogOnInfo.ConnectionInfo.ServerName
            strDB = crTableLogOnInfo.ConnectionInfo.DatabaseName
            strUID = crTableLogOnInfo.ConnectionInfo.UserID
            strPWD = crTableLogOnInfo.ConnectionInfo.Password

            OutputDebugLine("BEFORE")
            OutputDebugLine("TABLE NAME: " & aTable.Name)
            OutputDebugLine("TABLE LOC: " & aTable.Location)
            OutputDebugLine("SERVER: " & strDSN)
            OutputDebugLine("DB: " & strDB)
            OutputDebugLine("UID: " & strUID)
            OutputDebugLine("PWD: " & strPWD)
            OutputDebugLine("REPORT NAME: " & crTableLogOnInfo.ReportName)
            OutputDebugLine("Table Name: " & crTableLogOnInfo.TableName)

            aTable.ApplyLogOnInfo(crTableLogOnInfo)
            
            strLocation = strNewPath   'pass new mdb name
           
            OutputDebugLine("New Location: " & strLocation)
            Try
                aTable.Location = strLocation
            Catch ex As Exception
                OutputDebugLine("Set Location Error: " & ex.ToString)
            End Try

            OutputDebugLine("AFTER")
            OutputDebugLine("TABLE NAME: " & aTable.Name)
            OutputDebugLine("TABLE LOC: " & aTable.Location)
            OutputDebugLine("SERVER: " & strDSN)
            OutputDebugLine("DB: " & strDB)
            OutputDebugLine("UID: " & strUID)
            OutputDebugLine("PWD: " & strPWD)
            OutputDebugLine("REPORT NAME: " & crTableLogOnInfo.ReportName)
            OutputDebugLine("Table Name: " & crTableLogOnInfo.TableName)
            Try
                blnTest = aTable.TestConnectivity()
                OutputDebugLine("CONNECTED? " & blnTest.ToString())
            Catch ex As Exception
                OutputDebugLine("CONNECTED? NO")
                OutputDebugLine(ex.ToString)
            End Try
        Next aTable

        myWrite.Close()
        myWrite = Nothing
        myFile = Nothing

        CrystalReportViewer1.ReportSource = myreport
    End Function
 
I had a similar problem a while back, this is the code that I used to change the db at run time...


VB.NET:
    Dim table As CrystalDecisions.CrystalReports.Engine.Table
    Dim tableLogOnInfo
    Dim tables
    Dim conInfo As New CrystalDecisions.Shared.ConnectionInfo
    Dim rptDocument As New CrystalDecisions.CrystalReports.Engine.ReportDocument

    Private Sub crv_reportViewer_viewer_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles crv_reportViewer_viewer.Load
        Dim conInfo As New CrystalDecisions.Shared.ConnectionInfo
        Dim strReportPath As String = My.Application.Info.DirectoryPath & "\" & strReportName & ".rpt"
        Try
            conInfo.IntegratedSecurity = False

            conInfo.DatabaseName = My.Application.Info.DirectoryPath & "\" & "stupidDB.mdb"
            rptDocument.Load(strReportPath)
            tables = rptDocument.Database.Tables
            For Each table In tables
                tableLogOnInfo = table.LogOnInfo
                tableLogOnInfo.ConnectionInfo = conInfo
                table.ApplyLogOnInfo(tableLogOnInfo)
            Next
            rptDocument.VerifyDatabase()
            rptDocument.ReportOptions.EnableSaveDataWithReport = False
            Me.crv_reportViewer_viewer.ReportSource = rptDocument
        Catch ex As Exception
            MessageBox.Show(ex.Message & vbCrLf & ex.ToString)
        End Try

    End Sub

It's a bit less wordy than yours and may be of some help.
 
Back
Top