Merubah Setting Connection String Crystal Report pada VB .Net

Program VB .Net yang menggunakan Crystal Report (CR) yang dibuat di komputer lokal akan menemukan kendala saat program tersebut didistribusikan (diinstall dikomputer yang menggunakan database yang berbeda) karena ConnectionString yang dipergunakan pasti berbeda. Berikut source code untuk mengatasi masalah tersebut.

Mengganti CR ConnectionString pada VB
Note : Struktur tabel harus sama!!!

 
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
Dim myReport As New worldsales_northwind() '<-- lihat source code di bawah 
CrystalReportViewer1.ReportSource = myReport 
myReport.Load() 
Dim myDBConnectionInfo As New CrystalDecisions.Shared.ConnectionInfo() 
With myDBConnectionInfo 
.ServerName = "localhost" 
.DatabaseName = "Northwind" 
.UserID = "sa" 
.Password = "" 
End With 
End Sub 

Mengganti source melalui VB tanpa tergantung pada CR

Dim crtableLogoninfos As New TableLogOnInfos() 
Dim crtableLogoninfo As New TableLogOnInfo() 
Dim crConnectionInfo As New ConnectionInfo() 
Dim CrTables As Tables 
Dim CrTable As Table 
 
'Declare ReportDocument object and load your existing report 
'Make sure that you give the correct path for the document else it will give exception 
Dim crReportDocument As New ReportDocument() 
crReportDocument.Load("C:\MyApp\Crystal\Crystal\WorldSalesReport.rpt") 
CrystalReportViewer1.ReportSource = crReportDocument 
 
CrTables = crReportDocument.Database.Tables 
 
Dim crLoc As String 
crLoc = txtDb.ToString & ".dbo" 
 
For Each CrTable In CrTables 
 
crtableLogoninfo = CrTable.LogOnInfo 
'Read MachineName\InstanceName,Database details from User interface 
'and load them into crConnectionInfo object 
crConnectionInfo.ServerName = txtMac.Text 
crConnectionInfo.DatabaseName = txtDb.Text 
crConnectionInfo.IntegratedSecurity = True 
crtableLogoninfo.ConnectionInfo = crConnectionInfo 
CrTable.ApplyLogOnInfo(crtableLogoninfo) 
CrTable.Location.Substring(CrTable.Location.LastIndexOf(".") + 1) 
 
Next 
 
crReportDocument.ReportOptions.EnableSaveDataWithReport = False 
'Refresh the ReportViewer Object 
CrystalReportViewer1.RefreshReport() 
'Bind the ReportDocument to ReportViewer Object 
CrystalReportViewer1.ReportSource = crReportDocument 

Dari Sumber lain : http://vb.net-informations.com/crystal-report/vb.net_crystal_report_load_dynamically.htm

Imports CrystalDecisions.CrystalReports.Engine 
Imports CrystalDecisions.Shared 
Public Class Form1 
  Private Sub Button1_Click(ByVal sender As System.Object, _ 
  ByVal e As System.EventArgs) Handles Button1.Click 
      Dim cryRpt As New ReportDocument 
      Dim crtableLogoninfos As New TableLogOnInfos 
      Dim crtableLogoninfo As New TableLogOnInfo 
      Dim crConnectionInfo As New ConnectionInfo 
      Dim CrTables As Tables 
Dim CrTable As Table 
cryRpt.Load("PUT CRYSTAL REPORT PATH HERE\CrystalReport1.rpt") 
 
With crConnectionInfo 
.ServerName = "YOUR SERVER NAME" 
.DatabaseName = "YOUR DATABASE NAME" 
.UserID = "YOUR DATABASE USERNAME" 
.Password = "YOUR DATABASE PASSWORD" 
End With 
 
CrTables = cryRpt.Database.Tables 
For Each CrTable In CrTables 
crtableLogoninfo = CrTable.LogOnInfo 
crtableLogoninfo.ConnectionInfo = crConnectionInfo 
CrTable.ApplyLogOnInfo(crtableLogoninfo) 
Next 
 
CrystalReportViewer1.ReportSource = cryRpt 
CrystalReportViewer1.Refresh() 
End Sub 
End Class 

 

The power of documents

Kami sajikan dengan bahasa yang mudah dengan disertai command line yang bisa di copy-paste sehingga memudahkan untuk melakukan modifikasi command line