Relationen
Zwischen diesen beiden Datenquellen können Relationen festgelegt werden. Die Relation wird zur Definition der "Master-Detail" Beziehung verwendet. So kann beispielsweise ein Eintrag in der Tabelle "Categories" mehrere Einträge in der Tabelle "Products" haben:
Zur Erstellung einer Relation muss das Folgende angegeben werden:
- Tabelle des übergeordneten Elementes;
- Kind-Tabelle;
- Reihe an Schlüsselspalten in der übergeordneten Tabelle;
- Reihe an Schlüsselspalten in der Kind-Tabelle;
Als Beispiel dienen die Tabellen "Categories" und "Products" der Demo-Datenbank. Diese zeigen die folgende Struktur:
Beide Tabellen haben das CategoryID
-Feld, für das die Relation festgelegt werden kann. Eine Kategorie kann also mehrere Produkte beinhalten.
Wie können zusammenhängende Datenquellen in FastReport genutzt werden? Hier eignen sich zwei Methoden.
Mit der ersten Methode können Berichte der Art "Master-Detail" erstellt werden. Hierzu werden zwei "Daten"-Leisten genutzt. Die Masterleiste ist mit der Master-Datenquelle verbunden und die Detailleiste mit der Detail-Datenquelle. Das Beispiel schaut folgendermaßen aus:
Ein solcher Bericht wird, nach seinem Durchlauf, eine Liste an Produkten in jeder Kategorie drucken.
Die zweite Methode ermöglicht die Referenzierung des Masters aus der Detai-Datenquelle. Dies wird im nächsten Beispiel erläutert: Hier soll eine Liste aller Produkte gedruckt werden. Hierzu wird eine "Daten"-Leiste benötigt, die mit der "Products"-Tabelle verbunden ist.
Ein solcher Bericht druckt alle Produkte aus allen Kategorien. Angenommen es soll neben allen Produkten, auch der Kategoriename, zu dem dieses gehört, gedruckt werden; Ohne Relation würde sich dies sehr kompliziert gestalten. Wir kennen lediglich die ID der Produktkategorie (repräsentiert in der Spalte CategoryID
in der Tabelle "Products"). Der Name der Kategorie, der gedruckt werden soll, ist in der Spalte CategoryName
der Tabelle "Categories" gespeichert. Mittels der Relation können wir zu der Kategorie auf folgende Weise referenzieren:
[Products.Categories.CategoryName]
Für die aktuelle Zeile der Tabelle "Products" findet FastReport die entsprechende Zeile des übergeordneten Elementes in der Tabelle "Categories" und gibt einen Wert an die Spalte CategoryName
zurück.
Allgemein ermöglicht die Referenzierung auf ein Tabellenfeld eines übergeordneten Elements eine unbeschränkte Anzahl an Tabellenahnen:
[Child_table.Its_parent.Parent_of_a_parent.And _so_on.Column_name]
Zum Hinzufügen einer solchen Datenspalte in einen Bericht, wird die Tabelle "Products" im "Daten"-Fenster geöffnet. Bei den Spalten lässt sich eine Verknüpfung mit der Tabelle "Categories" erkennen:
Ziehen wir die Spalte (obigen Abbildung) in den Bericht, erhält man ein "Text"-Objekt mit dem Text:
[Products.Categories.CategoryName]
Der Bericht wird folgendermaßen aussehen:
Beim Durchlauf eines solchen Berichtes wird das Folgende zu erkennen sein: