Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Zmiana mapowania źródeł danych Crystal Report

Poniżej znajdziesz procedurę, której używam (uprościłem ją w locie, wyłączając nasze własne obiekty i zmienne globalne). Procedura ta pozwala na przekierowanie raportu z oryginalnego połączenia używanego w czasie tworzenia do aktywnego serwera SQL. Jest napisany w VB i używa 2 głównych obiektów:

  1. Oryginalny obiekt raportu otwarty przez instancję Crystal Report
  2. Połączenie ADODB będące aktywnym połączeniem (o nazwie P_currentConnection) do bieżącego serwera SQL

Ta funkcja (może być również podrzędną) jest wywoływana przed wyświetleniem/wydrukowaniem obiektu raportu w aplikacji. Może być używany podczas dystrybucji raportów między zreplikowanymi bazami danych, w których użytkownicy, w zależności od ich lokalizacji, łączą się z różnymi serwerami/bazami danych.

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

Można go wywołać za pomocą procedury takiej jak:

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)

Jeśli raport zawiera podraporty, konieczne może być również przekierowanie ich do aktywnego połączenia. W takim przypadku będziesz musiał przejrzeć wszystkie obiekty w swoim raporcie, sprawdzić te, które są typu raport i przekierować je do nowego połączenia. Jestem pewien, że będziesz się dobrze bawić dodając odpowiednie dodatkowe linie do tej oryginalnej procedury.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Znajdź wszystkie ciągi, które mają co najmniej X znaków, uporządkuj według podobieństwa

  2. Jak ROW_NUMBER() działa w SQL Server

  3. Mvc-Mini-Profiler v1.7 w projekcie EF 4.1 Code-First nie profiluje SQL

  4. Przekaż Dictionary<string,int> do procedury składowanej T-SQL

  5. Czy możemy zainstalować edycję Express i edycję Standard SQL Server na tym samym komputerze użytkownika?