sql >> Databáze >  >> RDS >> Sqlserver

Přemapování zdroje dat Crystal Report

Níže naleznete postup, který používám (zjednodušil jsem ho za chodu, potlačením našich vlastních objektů a globálních proměnných). Tento postup umožňuje přesměrovat sestavu z původního připojení použitého v době vývoje na aktivní SQL server. Je napsán ve VB a používá 2 hlavní objekty:

  1. Původní objekt sestavy byl otevřen prostřednictvím instance Crystal report
  2. Připojení ADODB je aktivní připojení (nazývané P_currentConnection) k aktuálnímu serveru SQL

Tato funkce (může být také dílčí) se volá před zobrazením/tiskem objektu sestavy v aplikaci. Lze jej použít při distribuci sestav mezi replikované databáze, kde se uživatelé v závislosti na jejich umístění připojují k různým serverům/databázím.

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

Lze jej volat pomocí procedury jako:

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)

V případě, že vaše sestava obsahuje podsestavy, možná je také budete muset přesměrovat na aktivní připojení. V tomto případě budete muset procházet všechny objekty v sestavě, zkontrolovat ty, které jsou typu sestavy, a přesměrovat je na nové připojení. Jsem si jistý, že se budete bavit přidáváním odpovídajících řádků navíc k tomuto původnímu postupu.



  1. Aktualizace pomocí vlastního připojení

  2. Jak získat vygenerované ID z vloženého řádku pomocí ExecuteScalar?

  3. Zlepšete ladění výkonu SQL Server pomocí těchto 3 tipů

  4. jak stáhnout soubor založený na blobu z databáze MySQL v PHP?