Ниже вы найдете процедуру, которую я использую (я упростил ее на лету, подавив наши собственные объекты и глобальные переменные). Эта процедура позволяет перенаправить отчет из исходного соединения, используемого во время разработки, на активный сервер SQL. Он написан на VB и использует 2 основных объекта:
- Исходный объект отчета, открытый через экземпляр отчета Crystal
- ADODB-соединение, являющееся активным соединением (называемое P_currentConnection) с текущим сервером SQL
Эта функция (также может быть подпрограммой) вызывается перед просмотром / печатью объекта отчета в приложении. Его можно использовать при распределении отчетов между реплицированными базами данных, где пользователи, в зависимости от их местоположения, подключаются к различным серверам / базам данных.
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
Его можно вызвать с помощью процедуры, такой как:
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)
Если в ваш отчет включены вложенные отчеты, возможно, вам также придется перенаправить их на активное соединение. В этом случае вам придется просмотреть все объекты в вашем отчете, проверить те, которые относятся к типу отчета, и перенаправить их на новое соединение. Я уверен, что вам будет интересно добавить соответствующие дополнительные строки в эту оригинальную процедуру.