Bericht mit 1:n-Beziehung mal andersDie 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.

BeispieldatenbankDie 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 AuflistungZiel 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: - Legen Sie einen neuen Bericht an und weisen Sie der Eigenschaft Datenherkunft die Tabelle Kategorien zu.
- Ziehen Sie die beiden Felder Kategorie-Nr und Kategoriename in den Detailbereich des Berichtsentwurfs.
- Legen Sie unter diesen beiden Feldern ein ungebundenes Textfeld namens txtArtikel an.
- Stellen Sie das Feld auf eine entsprechende Breite ein und weisen Sie der Eigenschaft Vergrößerbar des Textfeldes txtArtikel den Wert Ja zu.
- Stellen Sie diese Eigenschaft auch für den Detailbereich auf den Wert Ja ein.
- 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. |