Di seguito troverai la procedura che utilizzo (l'ho semplificata al volo, sopprimendo i nostri oggetti e le variabili globali). Questa procedura consente di reindirizzare un report da una connessione originale utilizzata in fase di sviluppo al server SQL attivo. È scritto in VB e utilizza 2 oggetti principali:
- L'oggetto report originale è stato aperto tramite un'istanza di crystal report
- Una connessione ADODB è la connessione attiva (denominata P_currentConnection) al server SQL corrente
Questa funzione (potrebbe essere anche un sub) viene chiamata prima di visualizzare/stampare l'oggetto report nell'applicazione. Può essere utilizzato durante la distribuzione di report tra database replicati in cui gli utenti, a seconda della loro posizione, si connettono a server/database diversi.
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
Può essere chiamato con una procedura come:
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)
Nel caso in cui il tuo rapporto includa sottoreport, potresti anche doverli reindirizzare alla connessione attiva. In questo caso, dovrai sfogliare tutti gli oggetti nel tuo rapporto, controllare quelli che sono del tipo di rapporto e reindirizzarli alla nuova connessione. Sono sicuro che ti divertirai ad aggiungere le righe extra corrispondenti a questa procedura originale.