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

Gentilknytning af Crystal Reports datakilde

Du vil herefter finde den procedure, jeg bruger (jeg forenklede den med det samme ved at undertrykke vores egne objekter og globale variabler). Denne procedure gør det muligt at omdirigere en rapport fra en original forbindelse, der blev brugt på udviklingstidspunktet, til den aktive SQL-server. Det er skrevet i VB og bruger 2 hovedobjekter:

  1. Det originale rapportobjekt blev åbnet gennem en forekomst af krystalrapport
  2. En ADODB-forbindelse er den aktive forbindelse (kaldet P_currentConnection) til den aktuelle SQL-server

Denne funktion (kan også være en sub) kaldes før visning/udskrivning af rapportobjektet i applikationen. Det kan bruges, når rapporter distribueres blandt replikerede databaser, hvor brugere, afhængigt af deres placering, opretter forbindelse til forskellige servere/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

Det kan kaldes med en procedure 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)

Hvis din rapport indeholder underrapporter, skal du muligvis også omdirigere dem til den aktive forbindelse. I dette tilfælde skal du gennemse alle objekter i din rapport, kontrollere dem, der er af rapporttypen og omdirigere dem til den nye forbindelse. Jeg er sikker på, at du vil have det sjovt med at tilføje de tilsvarende ekstra linjer til denne originale procedure.



  1. SQLAlchemy:Tjek om en given værdi er på en liste

  2. Referencer til ydre forespørgsel i underforespørgsel

  3. Anvend en enkelt udløserprocedure på mange forskellige tabeller

  4. Fejlfinding af Microsoft SQL Server-fejl 18456