Bericht mit Gruppen
Bericht mit Gruppen
Im vorherigen Beispiel haben wir einen zweistufigen Bericht basierend auf den Daten aus zwei Tabellen erstellt. Ein weiterer Bericht, der gleich aussieht, kann in FastReport erstellt werden, diesmal basierend auf einem Datensatz, der aus einer verbundenen Abfrage erhalten wurde.
Um dies zu tun, wird eine SQL-Abfrage benötigt, die Daten aus beiden Tabellen zurückgibt und auf eine bestimmte Weise sortiert ist . In unserem Beispiel werden die Tabellen über das "acSubject" Feld aus der Kunden- und das "acConsignee" Feld aus der Bestelltabelle verbunden. Die Abfrage könnte sein:
select *
from tHE_SetSubj, tHE_Order
where tHE_SetSubj.acSubject = tHE_Order.acConsignee
order by tHE_SetSubj.acSubject
Die "order by" Zeile ist erforderlich, um die Datensätze nach dem Feld “acSubject” (Kunde) zu sortieren.
Wie kann ein mehrstufiger Bericht mit diesen Daten gestaltet werden? Es gibt ein spezielles Band, den “Gruppenheader”. Eine Bedingung (ein Datenbankfeldwert oder ein Ausdruck) wird für das Band festgelegt; das Band wird jedes Mal ausgegeben, wenn sich der Wert der Bedingung ändert. Das folgende Beispiel veranschaulicht dies.
Erstellen wir ein neues Projekt in Delphi und platzieren die Komponente “TfrxDlDBQuery”. Setzen Sie die Eigenschaften der neuen Komponente mit dem Namen "DlDBQuery1" wie hier gezeigt:
SQL =
'select *
from tHE_SetSubj, tHE_Order
where tHE_SetSubj.acSubject = tHE_Order.acConsignee
order by tHE_SetSubj.acSubject'
UserName = 'Gruppe'
Fügen Sie ein “Gruppenheader”-Band zum Bericht hinzu. Setzen Sie eine Bedingung (in diesem Fall das Datenfeld “Group.acSubject”) im Editor des “Gruppenheaders”:

Verknüpfen Sie auch das Datenband mit der “Gruppe” Datenquelle und arrangieren Sie einige Objekte wie gezeigt (beachten Sie, dass der Gruppenheader über dem Datenband platziert werden muss):

Das “Gruppenheader”-Band wird nur ausgegeben, wenn sich der Wert des Feldes, mit dem es verknüpft ist, ändert. Andernfalls wird das Datenband, das mit dem “Gruppen”-Datensatz verbunden ist, angezeigt. Wenn wir diesen Bericht mit dem zuvor erstellten Master-Detail-Bericht vergleichen, ist offensichtlich, dass die Bestellnummern überhaupt nicht sortiert sind. Dies kann leicht korrigiert werden, indem die 'order by'-Klausel der SQL-Abfrage geändert wird:
select *
from tHE_SetSubj, tHE_Order
where tHE_SetSubj.acSubject = tHE_Order.acConsignee
order by tHE_SetSubj.acSubject, tHE_Order.acKey

Berichte mit geschachtelten Gruppen können auf ähnliche Weise gestaltet werden. Die Tiefe der Verschachtelung von Gruppen ist unbegrenzt. Berichte, die Gruppen verwenden, haben einige Vorteile gegenüber Berichten des Master-Detail-Typs:
- der gesamte Bericht benötigt nur einen Datensatz (Abfrage)
- die Anzahl der Daten Gruppierungsebenen ist unbegrenzt
- Daten sortieren wird möglich
- optimale Nutzung der Datenbankressourcen (die Abfrage gibt nur einen Datensatz zur Ausgabe zurück, wobei die Filterung durch die Abfrage erfolgt).
Der einzige Nachteil ist die Notwendigkeit, Abfragen in der SQL-Sprache zu schreiben. Ein grundlegendes Wissen über SQL ist jedoch für jeden Programmierer, der mit Datenbanken arbeitet, praktisch obligatorisch.