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 mchten, und das auch noch in einer durch Kommata getrennten Liste, finden Sie im vorliegenden Beitrag die Lsung.

Beispieldatenbank

Die Beispieldatenbank enthlt 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 gewnschte Resultat.

Abbildung 1: Bericht mit Auflistungen

Um diesen Bericht zu erstellen, gehen Sie folgendermaen 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 Vergrerbar des Textfeldes txtArtikel den Wert Ja zu.
  5. Stellen Sie diese Eigenschaft auch fr den Detailbereich auf den Wert Ja ein.
  6. Fgen Sie eine Prozedur fr 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 fr jeden Artikel einmal aufgerufen. Sie ffnet eine Datensatzgruppe, die alle Eintrge der Tabelle Artikel enthlt, in denen die aktuelle Kategorie des Berichts ausgewhlt ist.

Aus diesen Datenstzen werden in einer Do While-Schleife die Artikelnamen eingelesen und zu einer Liste zusammengefgt.

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

© 2003-2015 André Minhorst Alle Rechte vorbehalten.