sql >> Base de Datos >  >> RDS >> Sqlserver

Reasignación de origen de datos de Crystal Report

A continuación encontrará el procedimiento que uso (lo simplifiqué sobre la marcha, suprimiendo nuestros propios objetos y variables globales). Este procedimiento permite redirigir un informe desde una conexión original utilizada en el momento del desarrollo al servidor SQL activo. Está escrito en VB y utiliza 2 objetos principales:

  1. El objeto de informe original se abrió a través de una instancia de Crystal Report
  2. Una conexión ADODB que es la conexión activa (llamada P_currentConnection) al servidor SQL actual

Esta función (también podría ser una sub) se llama antes de ver/imprimir el objeto de informe en la aplicación. Se puede usar al distribuir informes entre bases de datos replicadas donde los usuarios, según su ubicación, se conectan a diferentes servidores/bases de datos.

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

Se puede llamar con un procedimiento 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)

En caso de que su informe incluya subinformes, es posible que también deba redirigirlos a la conexión activa. En este caso, deberá buscar todos los objetos en su informe, verificar los que son del tipo de informe y redirigirlos a la nueva conexión. Estoy seguro de que te divertirás agregando las líneas adicionales correspondientes a este procedimiento original.