Vous trouverez ci-après la procédure que j'utilise (je l'ai simplifiée à la volée, en supprimant nos propres objets et variables globales). Cette procédure permet de rediriger un rapport d'une connexion d'origine utilisée au moment du développement vers le serveur SQL actif. Il est écrit en VB et utilise 2 objets principaux :
- L'objet de rapport d'origine ouvert via une instance de Crystal Report
- Une connexion ADODB étant la connexion active (appelée P_currentConnection) au serveur SQL actuel
Cette fonction (qui peut aussi être une sous-fonction) est appelée avant d'afficher/d'imprimer l'objet de rapport dans l'application. Il peut être utilisé lors de la distribution de rapports entre des bases de données répliquées où les utilisateurs, en fonction de leur emplacement, se connectent à différents serveurs/bases de données.
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
Il peut être appelé avec une procédure telle que :
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)
Si votre rapport inclut des sous-rapports, vous devrez peut-être également les rediriger vers la connexion active. Dans ce cas, vous devrez parcourir tous les objets de votre rapport, cocher ceux qui sont de type rapport et les rediriger vers la nouvelle connexion. Je suis sûr que vous vous amuserez à ajouter les lignes supplémentaires correspondantes à cette procédure originale.