Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Remapeamento da fonte de dados do Crystal Report


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:
  1. O objeto de relatório original foi aberto por meio de uma instância do Crystal Report
  2. 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.