sql >> Database >  >> RDS >> Sqlserver

Crystal Reports-gegevensbron opnieuw toewijzen

Hierna vindt u de procedure die ik gebruik (ik heb het meteen vereenvoudigd, onze eigen objecten en globale variabelen onderdrukt). Met deze procedure kan een rapport van een oorspronkelijke verbinding die tijdens de ontwikkeling werd gebruikt, worden omgeleid naar de actieve SQL-server. Het is geschreven in VB en gebruikt 2 hoofdobjecten:

  1. Het oorspronkelijke rapportobject geopend via een exemplaar van Crystal Reports
  2. Een ADODB-verbinding is de actieve verbinding (genaamd P_currentConnection) met de huidige SQL-server

Deze functie (kan ook een sub zijn) wordt aangeroepen voordat het rapportobject in de toepassing wordt bekeken/afgedrukt. Het kan worden gebruikt bij het distribueren van rapporten tussen gerepliceerde databases waar gebruikers, afhankelijk van hun locatie, verbinding maken met verschillende servers/databases.

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

Het kan worden aangeroepen met een procedure zoals:

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)

Als uw rapport subrapporten bevat, moet u deze mogelijk ook omleiden naar de actieve verbinding. In dit geval moet u door alle objecten in uw rapport bladeren, de objecten van het rapporttype aanvinken en ze omleiden naar de nieuwe verbinding. Ik weet zeker dat je veel plezier zult beleven aan het toevoegen van de bijbehorende extra regels aan deze originele procedure.



  1. Hoe aparte rijen te selecteren zonder group by statement te gebruiken

  2. Verpakt SQL Server Select... Insert Queries in een impliciete transactie?

  3. Hoe de IDENTITY()-functie in SQL Server te gebruiken?

  4. een dynamische query bouwen in mysql en golang