Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Remappage de la source de données Crystal Report

Vous trouverez ci-après la procédure que j'utilise (je l'ai simplifiée à la volée, en supprimant nos propres objets et variables globales). Cette procédure permet de rediriger un rapport d'une connexion d'origine utilisée au moment du développement vers le serveur SQL actif. Il est écrit en VB et utilise 2 objets principaux :

  1. L'objet de rapport d'origine ouvert via une instance de Crystal Report
  2. Une connexion ADODB étant la connexion active (appelée P_currentConnection) au serveur SQL actuel

Cette fonction (qui peut aussi être une sous-fonction) est appelée avant d'afficher/d'imprimer l'objet de rapport dans l'application. Il peut être utilisé lors de la distribution de rapports entre des bases de données répliquées où les utilisateurs, en fonction de leur emplacement, se connectent à différents serveurs/bases de données.

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

Il peut être appelé avec une procédure telle que :

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)

Si votre rapport inclut des sous-rapports, vous devrez peut-être également les rediriger vers la connexion active. Dans ce cas, vous devrez parcourir tous les objets de votre rapport, cocher ceux qui sont de type rapport et les rediriger vers la nouvelle connexion. Je suis sûr que vous vous amuserez à ajouter les lignes supplémentaires correspondantes à cette procédure originale.