Click to See Complete Forum and Search --> : [RESOLVED] Change Datasource in CrystalReport - VB.NET


remya1000
01-27-2009, 10:12 PM
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


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.


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.

remya1000
02-04-2009, 12:02 PM
This code works for me. Hope this helps someone...


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