Você encontrará a seguir o procedimento que uso (simplifiquei-o rapidamente, suprimindo nossos próprios objetos e variáveis globais). Este procedimento permite redirecionar um relatório de uma conexão original usada em tempo de desenvolvimento para o servidor SQL ativo. Ele é escrito em VB e usa 2 objetos principais:
- O objeto de relatório original foi aberto por meio de uma instância do Crystal Report
- Uma conexão ADODB sendo a conexão ativa (chamada P_currentConnection) com o servidor SQL atual
Esta função (pode ser também uma sub) é chamada antes de visualizar/imprimir o objeto de relatório na aplicação. Ele pode ser usado na distribuição de relatórios entre bancos de dados replicados onde os usuários, dependendo de sua localização, se conectam a diferentes servidores/bancos de dados.
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
Ele pode ser chamado com um procedimento como:
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)
Caso seu relatório inclua sub-relatórios, talvez seja necessário redirecioná-los para a conexão ativa. Neste caso, você terá que navegar por todos os objetos do seu relatório, verificar os que são do tipo relatório e redirecioná-los para a nova conexão. Tenho certeza que você vai se divertir adicionando as linhas extras correspondentes a este procedimento original.