Hierna vindt u de procedure die ik gebruik (ik heb het meteen vereenvoudigd, onze eigen objecten en globale variabelen onderdrukt). Met deze procedure kan een rapport van een oorspronkelijke verbinding die tijdens de ontwikkeling werd gebruikt, worden omgeleid naar de actieve SQL-server. Het is geschreven in VB en gebruikt 2 hoofdobjecten:
- Het oorspronkelijke rapportobject geopend via een exemplaar van Crystal Reports
- Een ADODB-verbinding is de actieve verbinding (genaamd P_currentConnection) met de huidige SQL-server
Deze functie (kan ook een sub zijn) wordt aangeroepen voordat het rapportobject in de toepassing wordt bekeken/afgedrukt. Het kan worden gebruikt bij het distribueren van rapporten tussen gerepliceerde databases waar gebruikers, afhankelijk van hun locatie, verbinding maken met verschillende servers/databases.
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
Het kan worden aangeroepen met een procedure zoals:
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)
Als uw rapport subrapporten bevat, moet u deze mogelijk ook omleiden naar de actieve verbinding. In dit geval moet u door alle objecten in uw rapport bladeren, de objecten van het rapporttype aanvinken en ze omleiden naar de nieuwe verbinding. Ik weet zeker dat je veel plezier zult beleven aan het toevoegen van de bijbehorende extra regels aan deze originele procedure.