Du hittar härefter proceduren jag använder (jag förenklade det i farten, undertryckte våra egna objekt och globala variabler). Denna procedur gör det möjligt att omdirigera en rapport från en ursprunglig anslutning som användes vid utvecklingstillfället till den aktiva SQL-servern. Det är skrivet i VB och använder 2 huvudobjekt:
- Det ursprungliga rapportobjektet öppnades genom en instans av kristallrapport
- En ADODB-anslutning är den aktiva anslutningen (kallad P_currentConnection) till den aktuella SQL-servern
Denna funktion (kan också vara en sub) anropas innan rapportobjektet visas/skrivs ut i applikationen. Den kan användas vid distribution av rapporter mellan replikerade databaser där användare, beroende på var de befinner sig, ansluter till olika servrar/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
Den kan anropas med en procedur 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)
Om din rapport innehåller underrapporter kan du också behöva omdirigera dem till den aktiva anslutningen. I det här fallet måste du bläddra bland alla objekt i din rapport, kontrollera de som är av rapporttypen och omdirigera dem till den nya anslutningen. Jag är säker på att du kommer att ha roligt när du lägger till motsvarande extra rader till denna ursprungliga procedur.