Search Results for

    Show / Hide Table of Contents

    Report mit zwei Datenebenen (master-detail)

    Bisher haben wir nur Reporte betrachtet, die nur ein Band „MasterData“ (Daten 1. Ebene) enthielten. Dies erlaubte die Daten einer DB-Tabelle darzustellen. FastReport erlaubt jedoch die Darstellung von bis zu 6. Ebenen der Daten (es geht auch mehr indem man das Objekt "Unterreport", dazu jedoch später mehr). In der Regel sind Reporte auf 1-3 Ebenen beschränkt, selten mehr.

    Betrachten wir die Erstellung eines 2. Ebenen Reports. Dieser soll die Daten der Tabellen Kunden und Aufträge enthalten. Die erste Tabelle enthält die Kundenliste, die zweite die Bestellungen der Kunden. Die Tabellen sehen wie folgt aus:

    Kunden:
    
    Kund.-Nr.   Company
    1221        Kauai Dive Shoppe
    1231        Unisco
    1351        Sight Diver
    ...
    
    Bestellungen:
    
    Bestellnr.  Kund.-Nr.   Verkaufsdatum
    1003        1351        12.04.1988
    1023        1221        01.07.1988
    1052        1351        06.01.1989
    1055        1351        04.02.1989
    1060        1231        28.02.1989
    1123        1221        24.08.1993
    ...
    

    Wie man sieht, enthält die zweite Tabelle die gesamte Liste aller Bestellungen, von allen Unternehmen. Um eine Liste mit Bestellungen zu erhalten, die nur ein Unternehmen gemacht hat, muss man aus der ersten Tabelle die gewünschte Kund.-Nr. auswählen. Der Report sieht nun wie folgt aus:

    1221   Kauai Dive Shoppe
      1023   01.07.1988
      1123   24.08.1993
    
    1231   Unisco
      1060   28.02.1989
    
    1351   Sight Diver
      1003   12.04.1988
      1052   06.01.1989
      1055   04.02.1989
    

    Starten wir die Reporterstellung. Erstellen wir ein neues Projekt in Delphi. Auf die Seite legen wir zwei Komponenten TTable, die Komponente TDataSource, zwei Komponenten TfrxDBDataSet und eine TfrxReport. Die Komponenten stellen wir wie folgt ein:

    Table1:
    DatabaseName = 'DBDEMOS'
    TableName = 'Customer.db'
    
    Table2:
    DatabaseName = 'DBDEMOS'
    TableName = 'Orders.db'
    
    DataSource1:
    DataSet = Table1
    
    frxDBDataSet1:
    DataSet = Table1
    UserName = 'Customers'
    
    frxDBDataSet2:
    DataSet = Table2
    UserName = 'Orders'
    

    Im Designer des Reports verknüpfen wir die Datenquellen im Fenster „Report|Daten...“ und legen zwei Bänder auf die Seite „MasteData“ („Daten 1. Ebenen“) und „DetailData“ „Daten 2. Ebene“:

    Beachten Sie das Band „MasterData“ dieser muss oben liegen! Wenn man ihn unter das Band „Daten 2. Ebene“ setzt, wird FastReport dies beim Start des Reports melden.

    Wenn wir den Report nun starten, sehen wir das die Bestellliste für jeden Kunden gleich ist und alle Einträge der Liste Bestellungen enthalten. Dies geschieht, weil wir den Listenfilter in der Tabelle Bestellungen eingestellt haben. Bei der Komponente Table2 stellen wir die Eigenschaft MasterSource = DataSource1 ein, dadurch stellen wir die Verbindung “master-detail” her. Jetzt muss man die Bedingung des Filters festlegen. Hierfür rufen Sie den Editor der Eigenschaft MasterFields der Komponente Table2 auf:

    Wir müssen die beiden Felder CustNo der beiden Quellen verknüpfen. Wählen Sie die beiden(?) in der Liste oben aus und klicken Sie auf "Add". Die verknüpften Felder erscheinen im unteren Fenster. Sie können das Fenster jetzt schließen indem Sie auf OK klicken.

    Beim Start des Reports macht FastReport folgendes. Nach Auswahl eines Datensatzes aus der Master-Tabelle (Kunde), filtert es die Detail-Tabelle (Orders). Danach werden nur Datensätze angezeigt, die die Bedingung Orders.CustNo = Customer.CustNo erfüllen (sprich für jeden Kunden werden nur seine Bestellungen angezeigt):

    Auf diese Weise kann man Reporte mit bis zu 6. Datenebenen anlegen.

    Back to top © 1998-2022 Copyright Fast Reports Inc.