По-нататък ще намерите процедурата, която използвам (опростих я в движение, като премахнах нашите собствени обекти и глобални променливи). Тази процедура позволява пренасочване на отчет от оригинална връзка, използвана по време на разработка, към активния SQL сървър. Написан е на VB и използва 2 основни обекта:
- Оригиналният отчетен обект, отворен чрез екземпляр на кристален отчет
- 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)
В случай че отчетът ви включва подотчети, може също да се наложи да ги пренасочите към активната връзка. В този случай ще трябва да прегледате всички обекти във вашия отчет, да маркирате тези, които са от типа отчет и да ги пренасочите към новата връзка. Сигурен съм, че ще се забавлявате, като добавите съответните допълнителни редове към тази оригинална процедура.