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 1/2003.

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

Sortieren und Filtern von Listenfeldern

André Minhorst, Duisburg

Die meisten Windows-Anwendungen bieten komfortable Möglichkeiten, wenn es um die Sortierung von Listen geht. Der Windows Explorer verfügt beispielsweise über je ein Feld oberhalb jeder Spalte, mit dem Sie die Sortierung der gewünschten Spalte einstellen können. Listenfelder in Access haben keine solche Eigenschaft und sind diesbezüglich recht unkomfortabel. Im vorliegenden Beitrag erfahren Sie, wie Sie nicht nur komfortabel sortieren, sondern auch noch filtern können.

Der Wunsch nach Ordnung

Listenfelder dienen der übersichtlichen Anzeige von Daten aus einer oder mehreren Tabellen. Die Übersicht geht aber beizeiten verloren - beispielsweise, wenn die Anzahl der Datensätze so groß ist, dass die Höhe des Listenfeldes zur gleichzeitigen Anzeige aller Datensätze nicht ausreicht.

Auch die fehlende Sortierung kann zu einem Problem werden - vor allem in Kombination mit größeren Datenmengen. Damit sind auch bereits die Gegenmittel gefunden: Sortieren und Filtern. Bleibt die Frage, wie die Funktionalität zu realisieren ist.

Im Windows Explorer finden Sie z. B. geeignete Steuerelemente zum Sortieren der unterschiedlichen Felder in aufsteigender und absteigender Reihenfolge in der Kopfzeile der Liste (s. Abb. 1).

Abb. 1: Sortierung im Windows Explorer

Durch einen Klick auf eine der Überschriften können Sie erstens das Feld auswählen, nach dessen Inhalt sortiert werden soll, und zweitens die Richtung der Sortierung festlegen.

Daten sortieren

Die Sortierung von Daten kann z. B. nach dem Alphabet oder nach Zahlenwerten erfolgen -technisch handelt es sich dabei um den gleichen Vorgang. Sortierungen erfolgen nämlich in der Regel nach dem Zahlenwert der Anfangsbuchstaben, der in einer ASCII-Tabelle festgelegt ist.

Es kann in zwei Richtungen sortiert werden - aufwärts und abwärts. Da die Sortierung später per SQL durchgeführt wird, sind hier schon einmal die entsprechenden Schlüsselwörter:

ORDER BY <Feldname> ASC

sortiert eine Tabelle aufsteigend nach einem Wert, während

ORDER BY <Feldname> DESC

nach dem gleichen Wert in absteigender Reihenfolge sortiert.

Wenn Sie nach mehreren Werten sortieren möchten, können Sie die weiteren Feldnamen gefolgt von dem jeweiligen Schlüsselwort - also DESC oder ASC - durch Komma getrennt anhängen. Die Sortierung erfolgt dabei in der Reihenfolge der Angabe der Sortierkriterien.

Abb. 2: Beispiel eines Listenfeldes mit Sortier- und Filterfunktion

Abb. 3: Datenherkunft des Listenfeldes

Abb. 4: Eigenschaften des Listenfeldes

Daten filtern

Das Filtern von Daten kann die Menge der angezeigten Daten in den meisten Fällen soweit einschränken, dass die Anzahl der betroffenen Datensätze überschaubar wird.

Das wird umso einfacher, wenn Sie nach mehreren Feldern gleichzeitig filtern können.

Beispieldatenbank

Die Aufgabenverwaltung aus dem Beitrag Aufgabenverwaltung mit Access in der vorliegenden Ausgabe von Access im Unternehmen bietet ein geeignetes Listenfeld zur Demonstration effektiven Filterns und Sortierens (s. Abb. 2).

Allerdings ist der Aufbau des dortigen Listenfeldes relativ umfangreich, sodass die Funktionalität für den Einstieg an einem einfacheren Beispiel erläutert werden soll.

Hinweis

Als Beispieldaten halten - wie so oft - die Tabellen der Nordwind-Datenbank her. Zum Nachvollziehen der nachfolgenden Beispiele erstellen Sie am besten eine neue Datenbank und importieren die Tabellen Artikel, Kategorien und Lieferanten. (

Das Formular
frmArtikeluebersicht

Anschließend legen Sie ein neues Formular namens frmArtikeluebersicht an. Fügen Sie dem Formular ein neues Listenfeld hinzu und geben Sie ihm den Namen lstArtikel.

Erstellen Sie als Datensatzherkunft des Listenfeldes eine neue Abfrage namens qryArtikelMitDetailinformationen. Den Aufbau der Abfrage können Sie Abb. 3 entnehmen.

Füllen des Listenfeldes

Anschließend weisen Sie den Namen der neuen Abfrage der Eigenschaft Datensatzherkunft des Listenfeldes hinzu.

Abb. 5: Formularansicht des Formulars frmArtikeluebersicht

Private Sub txtAufgabeFilter_AfterUpdate()

    FilterUndSortierung

End Sub

Quellcode 1

Stellen Sie anschließend die Eigenschaften Spaltenanzahl und Spaltenbreiten so ein, dass alle gewünschten Informationen in der richtigen Breite angezeigt werden (s. Abb. 4).

Die Formularansicht sollte schließlich wie in
Abb. 5 aussehen.

Filtern von Listenfeldern

Das Filtern der Listenfelder soll nach Kriterien erfolgen, die Sie mit entsprechenden Text- oder Kombinationsfeldern eingeben bzw. auswählen.

Nachdem Sie das Listenfeld erstellt, die Datensatzherkunft des Listenfeldes zugewiesen und die Spaltenbreiten justiert haben, legen Sie die gewünschten Steuerelemente oberhalb der entsprechenden Spalten an - natürlich in der gleichen Breite wie die Spaltenbreite des Listenfeldes.

Praxis-Tipp

Eine gute Hilfe beim Ausrichten und dem Einstellen der Steuerelementbreite ist die Eigenschaft Spaltenbreiten des Listenfeldes (s. Abb. 4). Aufgrund der hier angegebenen Zahlen können Sie die Position und die Breite der Steuerelemente sehr genau festlegen. (

Je nach der Beschaffenheit des Inhalts einer Spalte des Listenfeldes werden Sie entweder ein Textfeld oder ein Kombinationsfeld zum Setzen des Filterwertes verwenden.

Bei Text- oder Memofeldern verwenden Sie in jedem Fall ein Textfeld, während Sie bei Feldern, deren Inhalt nicht in der eigentlichen, sondern einer verknüpften Tabelle gespeichert ist, vermutlich auch ein Kombinationsfeld verwenden.

Dieses Kombinationsfeld zeigt dann alle Werte der verknüpften Tabelle als Filteroptionen an. Wenn Sie Textfelder als Filteroption verwenden, können Sie natürlich auf Platzhalter wie Fragezeichen (?) oder Sternchen (*) zurückgreifen.

Filtern per Textfeld

Wenn Sie per Textfeld filtern, müssen Sie - was die Benutzeroberfläche angeht - nur das entsprechende Textfeld über der gewünschten Spalte platzieren und den Wert seiner Eigenschaft Name eingeben, da das Feld später vom Code aus angesprochen werden muss.

Im vorliegenden Beispiel soll zunächst nach dem Feld Artikel gefiltert werden. Nennen Sie das Textfeld zur Eingabe des Filterkriteriums daher txtArtikelFilter.

Nun müssen Sie für die Ereigniseigenschaft Nach Aktualisierung eine Prozedur hinterlegen, die den Filtervorgang in Gang setzt (s. Quellcode 1). Das Ereignis Nach Aktualisierung wird nach der Änderung des Textfeldinhalts ausgelöst.

Die Prozedur FilterUndSortierung führt anschließend den Filtervorgang aus, indem sie die Datensatzherkunft des Listenfeldes anpasst (s. Quellcode 2).

Die Prozedur bildet zunächst den Grundstein für die neue Datensatzherkunft des Listenfeldes und speichert es anschließend in der Variablen strSQLFilter.

Sub FilterUndSortierung()

    Dim strSQL As String

    Dim strSQLFilter As String

    Dim strSQLSort As String

    strSQL = "SELECT * FROM qryArtikelMitDetailinformationen"

    If Len(Me.txtArtikelFilter) > 0 Then

        strSQLFilter = strSQLFilter & ", Artikelname LIKE '" & Me.txtArtikelFilter _
            & "'"

    End If

    'Hier weitere Filterkriterien eintragen

    If Len(strSQLFilter) > 0 Then

        strSQL = strSQL & " WHERE " & Mid(strSQLFilter, 2, Len(strSQLFilter) - 1)

    End If

    'Hier Sortierkriterien eintragen

    Me.lstArtikeluebersicht.RowSource = strSQL

End Sub

Quellcode 2

Anschließend überprüft sie, ob das Textfeld mit dem Ausdruck, nach dem gefiltert werden soll, gefüllt ist. Falls ja, wird ein entsprechender Ausdruck an die Zeichenkette strSQLFilter angehängt. Falls das Textfeld keinen Inhalt hat, ist die neue Datensatzherkunft gleich der alten.

Schließlich hängt die Prozedur die Zeichenkette strSQLFilter - soweit sie nicht leer ist - der bereits bestehenden Zeichenkette strSQL mit einem vorangestellten WHERE an.

Filtern per Kombinationsfeld

Die Felder Kategorie und Lieferant beziehen ihre Werte aus den verknüpften Tabellen tblKategorien und tblLieferanten. Da die Werte also ohnehin aus einer festen Menge von Werten stammen, können Sie statt eines Textfeldes auch ein Kombinationsfeld für die Filterung bereitstellen. Der Benutzer kann den gesuchten Wert dann bequem aus dem Kombinationsfeld auswählen.

Legen Sie also z. B. über der Spalte mit den Lieferanten ein neues Kombinationsfeld an.

Geben Sie als Namen des Kombinationsfeldes cboLieferantenFilter an und verwenden Sie den folgenden Ausdruck als Datensatzherkunft:

SELECT [Lieferant-Nr], Firma 

FROM Lieferanten 

UNION 

SELECT 0 AS [Lieferant-Nr], "<kein Filter>" AS Firma 

FROM Lieferanten;

Die Abfrage fügt den Werten der Tabelle Lieferanten noch den Eintrag <kein Filter> hinzu. Dies ist erforderlich, um dem Benutzer die Möglichkeit zu geben, den Filter auf einfache Weise wieder zu entfernen.

Stellen Sie die Eigenschaften Spaltenanzahl und Spaltenbreite auf die Werte 2 bzw. 0 ein. Der Inhalt des Kombinationsfeldes könnte nun beispielsweise wie in Abb. 6 aussehen.

Abb. 6: Kombinationsfeld zur Auswahl von Kategorien als Filterkriterium

Nun fehlt noch die Funktionalität, die den Listenfeldinhalt nach der ausgewählten Kategorie filtert.

Dazu hinterlegen Sie einfach eine Prozedur für die Ereigniseigenschaft Nach Aktualisierung des Kombinationsfeldes, das die Anweisung FilterUndSortierung enthält.

Dadurch ruft Access nach der Änderung des Eintrages die Prozedur FilterUndSortierung auf.

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:

Verwandte Beiträge:

Listenfeld und Details in einem Formular

Suchfunktionen von einfach bis komplex

Globale Suche

© 2003-2015 André Minhorst Alle Rechte vorbehalten.