Announcement

Collapse
No announcement yet.

Crystal Report für Oracle und SQL-Server

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Crystal Report für Oracle und SQL-Server

    Hallo,

    ist es möglich einen Report programmgesteuert sowohl für eine Oracle-Datenbank als auch für
    eine SQL-Server-Datenbank zu verwenden. Ich habe einige Reports und möchte nicht je eine Version haben für genannte Datenbanken.

    Ich verwende Delphi7, Crystal 8.5 und die Report Designer Component (RDC), die ich als Typbibliothek einbinde.

    Vielen Dank
    Rainer

  • #2
    Hallo,

    ja - wenn man dem Crystal Report nur ein bereits mit der Ergebnismenge gefülltes Recordset-Objekt als Datenquelle unterschiebt, spielt die tatsächlich genutzte Datenbank keine Rolle:
    <pre>
    <b>var</b>
    aCRApp : IApplication;
    aCRRpt : IReport;
    aCRDB : IDatabase;
    <b>begin</b>
    aCRApp := CoApplication.Create;
    aCRRpt := aCRApp.OpenReport(sPath, 0);
    aCRDB := aCRRpt.Database;
    <font color="#003399"><i>// bereits gefülltes Recordset-Objekt als Datenquelle nutzen</i></font>
    aCRDB.SetDataSource(FRecordSet, 3, 1);
    CRViewer91.ReportSource := aCRRpt;
    CRViewer91.ViewReport;
    <b>end</b>;
    </pre&gt

    Comment


    • #3
      Vielen Dank für die schnelle Antwort

      Geht das auch wenn man kein Recordset hat ? Meine Reports greifen vollkommen autonom auf die Datenbank zu.

      So wie in Delphi: da kann ich ja auch einen
      ADOConnection.ConnectionString für unterschiedliche Datenbanken zusammenbauen und dann mit TADODataSet darauf zugreifen.

      In Crystal-RDC hab ich das versucht mit der Funktion IDatabase.LogonServer bekomme aber nur Fehlermeldungen.

      Gruss
      Raine

      Comment


      • #4
        Hallo,

        &gt;Meine Reports greifen vollkommen autonom auf die Datenbank zu

        in diesem Fall werden wohl separate Reports, die jeweils den spezifischen Datenbank-Treiber einbinden, notwendig sein. Über <i>LogonServer</i> kann man nur den Server-Namen sowie die Anmeldedaten (Benutzername + Passwort) übergeben, aber <b>nicht</b> den zu verwenden Treiber (ODBC, OLE DB etc.).

        Wenn allerdings das Programm unterschiedliche Zugriffswege vorsieht, um die Daten in ein <b>gemeinsam</b> genutztes Recordset/DataSet zu kopieren, "sieht" der Report unabhängig von der genutzten Datenbank immer nur die gleiche Datenquelle

        Comment


        • #5
          Hallo Andreas,

          ich hab einen Weg gefunden wie das geht.

          a. Verwendung der Typ-Library CRAXDRT_TLB. Anhand des Connection Strings ConnectBufferString prüfen ob ein Bereicht für Oracle oder SQL-Server vorliegt.

          b. falls z.B. Oracle-Bericht aber aktuell der SQL-Server verwendet wird, Report schliessen

          c. Konvertierung des Reports für neue Datenbank (Typ-Library CRAXDDRT_TLB). Hier gibt es die Funktion ConvertDatabaseDriver

          for i:=1 to Report.Database.Tables.Count do
          Report.Database.Tables.Itemi].ConnectBufferString := sNewConnectionString;
          Report.Database.ConvertDatabaseDriver
          'crdb_ado.dll', TRUE);

          d. Report speichern und schliessen

          e. dann wieder öffnen mit CRAXDRT_TLB

          Ich verwende die beiden Typ-Bibliotheken, weil mit CRAXDDRT die Funktion SetLogonInfo zum öffnen ohne konvertieren nicht funktioniert und nur CRAXDDRT die Methode ConvertDatabaseDriver hat

          Gruss
          Raine

          Comment

          Working...
          X