sql >> Databasteknik >  >> RDS >> Sqlserver

Ommapning av Crystal Reports datakälla

Du hittar härefter proceduren jag använder (jag förenklade det i farten, undertryckte våra egna objekt och globala variabler). Denna procedur gör det möjligt att omdirigera en rapport från en ursprunglig anslutning som användes vid utvecklingstillfället till den aktiva SQL-servern. Det är skrivet i VB och använder 2 huvudobjekt:

  1. Det ursprungliga rapportobjektet öppnades genom en instans av kristallrapport
  2. En ADODB-anslutning är den aktiva anslutningen (kallad P_currentConnection) till den aktuella SQL-servern

Denna funktion (kan också vara en sub) anropas innan rapportobjektet visas/skrivs ut i applikationen. Den kan användas vid distribution av rapporter mellan replikerade databaser där användare, beroende på var de befinner sig, ansluter till olika servrar/databaser.

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

Den kan anropas med en procedur som:

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)

Om din rapport innehåller underrapporter kan du också behöva omdirigera dem till den aktiva anslutningen. I det här fallet måste du bläddra bland alla objekt i din rapport, kontrollera de som är av rapporttypen och omdirigera dem till den nya anslutningen. Jag är säker på att du kommer att ha roligt när du lägger till motsvarande extra rader till denna ursprungliga procedur.



  1. Redigera postproblem i Access / SQL (Write Conflict)

  2. Varför genererar Entity Framework kapslade SQL-frågor?

  3. Vad är Oracle SQL &PL/SQL? Allt en nybörjare behöver veta

  4. MySqli-kommandon osynkroniserade; du kan inte köra det här kommandot nu