Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Bericht mit 1:n-Beziehung mal anders

Die Darstellung von 1:n-Beziehungen in Berichten erfolgt in der Regel über Gruppierungen oder Unterberichte. Wenn Sie aber beispielsweise nur die Artikel zu einzelnen Artikelkategorien auflisten möchten, und das auch noch in einer durch Kommata getrennten Liste, finden Sie im vorliegenden Beitrag die Lösung.

Beispieldatenbank

Die Beispieldatenbank enthält die Tabellen Artikel und Kategorien aus der Nordwinddatenbank sowie den Bericht rptKategorienUndArtikel zur Anzeige der einzelnen Kategorien mit den jeweiligen Artikeln.

Bericht mit Auflistung

Ziel des Beispiels ist die Anzeige aller Artikel, die einer bestimmten Kategorie zugeordnet sind, in Zusammenhang mit diesem Artikel - und das auch noch in einer durch Kommate getrennten Liste. Abbildung 1 zeigt das gewünschte Resultat.

Abbildung 1: Bericht mit Auflistungen

Um diesen Bericht zu erstellen, gehen Sie folgendermaßen vor:

  1. Legen Sie einen neuen Bericht an und weisen Sie der Eigenschaft Datenherkunft die Tabelle Kategorien zu.
  2. Ziehen Sie die beiden Felder Kategorie-Nr und Kategoriename in den Detailbereich des Berichtsentwurfs.
  3. Legen Sie unter diesen beiden Feldern ein ungebundenes Textfeld namens txtArtikel an.
  4. Stellen Sie das Feld auf eine entsprechende Breite ein und weisen Sie der Eigenschaft Vergrößerbar des Textfeldes txtArtikel den Wert Ja zu.
  5. Stellen Sie diese Eigenschaft auch für den Detailbereich auf den Wert Ja ein.
  6. Fügen Sie eine Prozedur für die Ereigniseigenschaft Beim Formatieren des Detailbereichs hinzu, die folgenden Inhalt hat:

Private Sub Detailbereich_Format(Cancel As Integer, FormatCount As Integer)

    Dim db As DAO.Database

    Dim rst As DAO.Recordset

    Dim str As String

    Set db = CurrentDb

    Set rst = db.OpenRecordset("SELECT Artikelname FROM Artikel WHERE [Kategorie-Nr] = " & Me.Kategorie_Nr, dbOpenDynaset)

    Do While Not rst.EOF

        str = str & rst!Artikelname & ", "

        rst.MoveNext

    Loop

    If Len(str) > 0 Then

        str = Left(str, Len(Trim(str)) - 1)

    End If

    Me.txtArtikel = str

End Sub

Die Prozedur wird für jeden Artikel einmal aufgerufen. Sie öffnet eine Datensatzgruppe, die alle Einträge der Tabelle Artikel enthält, in denen die aktuelle Kategorie des Berichts ausgewählt ist.

Aus diesen Datensätzen werden in einer Do While-Schleife die Artikelnamen eingelesen und zu einer Liste zusammengefügt.

Nach dem Abtrennen des Kommas hinter dem letzten Eintrag wird die resultierende Zeichenkette dem Textfeld zugewiesen.

© 2003-2015 André Minhorst Alle Rechte vorbehalten.