Du vil herefter finde den procedure, jeg bruger (jeg forenklede den med det samme ved at undertrykke vores egne objekter og globale variabler). Denne procedure gør det muligt at omdirigere en rapport fra en original forbindelse, der blev brugt på udviklingstidspunktet, til den aktive SQL-server. Det er skrevet i VB og bruger 2 hovedobjekter:
- Det originale rapportobjekt blev åbnet gennem en forekomst af krystalrapport
- En ADODB-forbindelse er den aktive forbindelse (kaldet P_currentConnection) til den aktuelle SQL-server
Denne funktion (kan også være en sub) kaldes før visning/udskrivning af rapportobjektet i applikationen. Det kan bruges, når rapporter distribueres blandt replikerede databaser, hvor brugere, afhængigt af deres placering, opretter forbindelse til forskellige servere/databaser.
Public Function connectReportToDatabase( _
P_report As CRAXDRT.Report)
Dim table As CRAXDRT.DatabaseTable, _
For Each table In P_report.Database.tables
If table.DllName <> "crdb_ado.dll" Then
table.DllName = "crdb_ado.dll"
End If
table.ConnectionProperties.DeleteAll
table.ConnectionProperties.Add "Provider", P_currentConnection.Provider
table.ConnectionProperties.Add "Data source", P_currentConnection.Properties("Data source").Value
table.ConnectionProperties.Add "Database", P_currentConnection.DefaultDatabase
table.ConnectionProperties.Add "Integrated security", P_currentConnection.Properties("Integrated security").Value
table.ConnectionProperties.Add "Persist Security Info", P_currentConnection.Properties("Persist Security Info").Value
table.ConnectionProperties.Add "Initial Catalog", P_currentConnection.Properties("Initial Catalog").Value
table.SetTableLocation table.location, "", P_currentConnection.ConnectionString
table.TestConnectivity
Next table
Det kan kaldes med en procedure som:
Dim crystal As CRAXDRT.Application, _
m_report as CRAXDRT.report
Set crystal = New CRAXDRT.Application
Set m_rapport = crystal.OpenReport(nameOfTheReport & ".rpt")
connectreportToDatabase(m_report)
Hvis din rapport indeholder underrapporter, skal du muligvis også omdirigere dem til den aktive forbindelse. I dette tilfælde skal du gennemse alle objekter i din rapport, kontrollere dem, der er af rapporttypen og omdirigere dem til den nye forbindelse. Jeg er sikker på, at du vil have det sjovt med at tilføje de tilsvarende ekstra linjer til denne originale procedure.