Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Rimappatura dell'origine dati di Crystal Report

Di seguito troverai la procedura che utilizzo (l'ho semplificata al volo, sopprimendo i nostri oggetti e le variabili globali). Questa procedura consente di reindirizzare un report da una connessione originale utilizzata in fase di sviluppo al server SQL attivo. È scritto in VB e utilizza 2 oggetti principali:

  1. L'oggetto report originale è stato aperto tramite un'istanza di crystal report
  2. Una connessione ADODB è la connessione attiva (denominata P_currentConnection) al server SQL corrente

Questa funzione (potrebbe essere anche un sub) viene chiamata prima di visualizzare/stampare l'oggetto report nell'applicazione. Può essere utilizzato durante la distribuzione di report tra database replicati in cui gli utenti, a seconda della loro posizione, si connettono a server/database diversi.

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

Può essere chiamato con una procedura come:

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)

Nel caso in cui il tuo rapporto includa sottoreport, potresti anche doverli reindirizzare alla connessione attiva. In questo caso, dovrai sfogliare tutti gli oggetti nel tuo rapporto, controllare quelli che sono del tipo di rapporto e reindirizzarli alla nuova connessione. Sono sicuro che ti divertirai ad aggiungere le righe extra corrispondenti a questa procedura originale.