Noe, denn ich weiß ja nicht was für Verknüpfungen der Report braucht.
Ich weiß ja nicht, ob du mit CR schonmal gearbeitet hast, aber um dort z.B. einen INNER JOIN zu erstellen, geht man in die Datenbankverwaltung rein, da hat man z.B. seine zwei Tabellen und zieht das eine zu verknüpfende Feld auf das der anderen Tabelle - genauso wie z.B. bei
Access.
Ich kann bei den TCrpeDS Komponenten nicht mehr machen also zu sagen:
CrpeDS1.connection := myZconnection;
CrpeDS1.sql("SELECT * FROM tbl_1");
CrpeDS2.connection := myZConnection;
CrpeDS2.sql("SELECT * FROM tbl_2");
CrpeViewer.open(report.rpt);
CrpeViewer.tableByName(tbl_1).datapointer := crpeDS1.datapointer;
CrpeViewer.tableByName(tbl_2).datapointer := crpeDS2.datapointer;
Damit bekommt CR zwei komplette Resultsets und muss diese anhand der im Report hinterlegten verknüpfung selbst ausrechnen.
Mit einer
SQL fähigen Schnittstelle hängt man einfach die Datenbankverbindung an das CrpeVier Object, z.b. eine
ODBC Verbindung, CR sieht er hat eine
SQL Datenbank zu Verfügung, erzeugt einen
SQL INNER JOIN, schickt das an die Datenbank und das eine Resultset dass es bekommt wir einfach nur noch ausgedruckt.
Es sollte dir wohl klar sein, dass erste Methode länger dauert, zum einen weil die ganzen datenbankspezifischen Optimierungen wegfallen, die ein Datenbanktreiber hätte, zum anderen weil auch Datenstätze geholt werden, die z.B. keinen passenden verknüpften Datensatz in der zweiten Tabelle enthält und CR die dann selbst "wegwerfen" muss.
(Den Code soll jetzt kein Delphicode sein sondern nur die Vorgehensweise verdeutlichen
)