Níže naleznete postup, který používám (zjednodušil jsem ho za chodu, potlačením našich vlastních objektů a globálních proměnných). Tento postup umožňuje přesměrovat sestavu z původního připojení použitého v době vývoje na aktivní SQL server. Je napsán ve VB a používá 2 hlavní objekty:
- Původní objekt sestavy byl otevřen prostřednictvím instance Crystal report
- Připojení ADODB je aktivní připojení (nazývané P_currentConnection) k aktuálnímu serveru SQL
Tato funkce (může být také dílčí) se volá před zobrazením/tiskem objektu sestavy v aplikaci. Lze jej použít při distribuci sestav mezi replikované databáze, kde se uživatelé v závislosti na jejich umístění připojují k různým serverům/databázím.
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
Lze jej volat pomocí procedury jako:
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)
V případě, že vaše sestava obsahuje podsestavy, možná je také budete muset přesměrovat na aktivní připojení. V tomto případě budete muset procházet všechny objekty v sestavě, zkontrolovat ty, které jsou typu sestavy, a přesměrovat je na nové připojení. Jsem si jistý, že se budete bavit přidáváním odpovídajících řádků navíc k tomuto původnímu postupu.