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

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 3/2012.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

Zusammenfassung

Erfahren Sie, wie Sie mit einem speziellen Formular Datensätze aus m:n-Beziehungen ermitteln, die mit einem oder mehreren gesuchten Datensätzen verknüpft sind.

Techniken

Formulare , VBA, Abfragen

Voraussetzungen

Access 2000 und höher

Beispieldateien

mnDatenperListenfeldFiltern.mdb

Shortlink

www.access-im-unternehmen.de/834

m:n-Daten per Listenfeld filtern

André Minhorst, Duisburg

Wenn Sie Daten wie etwa Bestelldaten aus einer m:n-Beziehung in einem Formular verwalten, suchen Sie meist nach Bestellungen eines bestimmten Kunden, mit einem bestimmten Bestelldatum et cetera. Sie könnten aber auch einmal nach solchen Bestellungen suchen, die mindestens einen von mehreren Artikeln enthalten oder die gleich mehrere angegebene Artikel aufführen sollen. Solche eine Suche führen Sie am einfachsten in einem separaten Formular durch, das zur Suche geöffnet wird und die Ergebnisse zur Auswahl bereitstellt.

Die hier vorgestellte Lösung ist auf zwei Formulare aufgeteilt. Das erste Formular entspricht etwa dem von der Nordwind-Datenbank bekannten Bestellformular, das Kundendaten und Bestellinformationen anzeigt (s. Abb. 1).

pic001.png

Abb. 1: Bestellformular mit Filter-Funktion

Darüber hinaus bietet das Formular mit der Schaltfläche Bestellungen filtern die Möglichkeit, einen weiteren Dialog zu öffnen. Dieser erlaubt es, einen oder mehrere Artikel auszuwählen, nach denen die Bestellungen durchsucht werden. Der Dialog sieht wie in Abb. 2 aus und bietet zwei wesentliche Funktionen. Zunächst legen Sie mit einer Optionsgruppe fest, ob Sie Bestellungen mit mindestens einem der nachfolgend angegebenen Artikel anzeigen möchten oder ob die Bestellungen alle gewählten Artikel enthalten müssen. Die Treffer werden gleich im Listenfeld rechts neben den Suchkriterien angezeigt. Mit einem Doppelklick auf einen der gefundenen Einträge zeigen Sie die entsprechende Bestellung im Bestellformular an.

pic002.png

Abb. 2: Filterkriterien für Bestellungen zusammenstellen

Formular zur Anzeige der Bestellungen

Dieses Formular enthält keine besonderen Techniken. Das Hauptformular frmBestellungen enthält als Datenherkunft eine Abfrage, die auf der Tabelle tblBestellungen basiert. Das Unterformular sfmBestelldetails liefert die zur jeweiligen Bestellung gehörenden Daten aus der Tabelle tblBestelldetails. Die Schaltfläche cmdOK schließt das Formular, die Schaltfläche cmdBestellungenFiltern öffnet den Dialog zum Zusammenstellen des Filters:

Private Sub cmdBestellungenFiltern_Click()

    DoCmd.OpenForm "frmFilterkriterien"

End Sub

Das Filterformular

Das Formular frmFilterkriterien sieht im Entwurf wie in Abb. 3 aus. Zur Eingabe der Filterkriterien stehen zwei Steuerelemente zur Verfügung. Das erste ist die Optionsgruppe ogrArtikelfilter mit den beiden Optionen Oder (Wert 1) und Und (Wert 2) und dem Standardwert 1. Das zweite Steuerelement ist ein Listenfeld namens lstArtikelfilter. Es enthält als Datensatzherkunft den folgenden Ausdruck:

pic003.png

Abb. 3: Das Formular frmFilterkriterien in der Entwurfsansicht

SELECT ArtikelID, Artikelname FROM tblArtikel ORDER BY Artikelname;

Dadurch zeigt es alle Artikelnamen in alphabetischer Reihenfolge an. Damit nur die Artikelnamen erscheinen und nicht die ArtikelID, erhalten die beiden Eigenschaften Spaltenanzahl und Spaltenbreiten die Werte 2 und 0cm.

Der Benutzer soll einen oder mehrere Werte dieses Listenfeldes markieren, daher stellen Sie die Eigenschaft Mehrfachauswahl auf Einfach ein (oder Erweitert, je nachdem, was Ihnen angenehmer ist).

Datensatzherkunft des Ergebnislistenfeldes

Das Ergebnislistenfeld zeigt beim Öffnen des Formulars die mit der Abfrage qryBestellungenBestelldetails ermittelten Daten an (s. Abb. 4). Diese Abfrage führt Daten aus den Tabellen tblBestellungen, tblBestelldetails und tblArtikel zusammen und sortiert diese aufsteigend nach dem Bestelldatum.

pic004.png

Abb. 4: Die Abfrage qryBestellungenBestelldetails dient als Datensatzherkunft des Listenfeldes lstBestellungen.

Auslösen der Aktualisierung der gefundenen Bestellungen

Da es mehr als ein Steuerelement gibt, das die Datensatzherkunft des Listenfeldes lstBestellungen ändert, wurden die Codezeilen zum Filtern der Bestellungen in eine eigene Prozedur ausgegliedert. Diese heißt Bestellungen filtern und wird durch zwei Ereignisse ausgelöst. Das erste ist das Aktualisieren der Optionsgruppe ogrArtikelfilter. Die dazugehörige Ereignisprozedur sieht so aus:

Private Sub ogrArtikelfilter_AfterUpdate()

    BestellungenFiltern

End Sub

Das zweite Ereignis ist das Ändern der Auswahl im Listenfeld lstArtikelfilter:

Private Sub lstArtikelfilter_AfterUpdate()

    BestellungenFiltern

End Sub

Gefilterte Bestellungen ermitteln

Die Prozedur BestellungenFiltern im Klassenmodul des Formulars frmFilterkriterien erledigt die Hauptarbeit (s. Listing 1). Die Prozedur durchläuft zunächst alle ausgewählten Einträge des Listenfeldes lstArtikelfilter. Dies geschieht innerhalb einer For...Next-Schleife mit der Laufvariablen i. Die Anzahl der zu durchlaufenden Elemente wird über die Eigenschaft Count der Auflistung ItemsSelected des Listenfeldes ermittelt.

Listing 1: Zusammenstellen der Datensatzherkunft nach dem Festlegen von Filterkriterien

Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

Sind Sie Abonnent?Jetzt einloggen ...
 

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

© 2003-2015 André Minhorst Alle Rechte vorbehalten.