Filtern und Suchen

Sobald Daten in größerem Umfang anfallen, sind Such- und Filtermechanismen in Datenbanken gefragt. Ohne Filtern geht der überblick verloren und für Auswertungen sind Sie das A und O. Abseits der Möglichkeiten, die Abfragen und VBA bereitstellen, hat Access über seine Benutzeroberfläche mehr zu bieten, als auf den ersten Blick offenbar wird.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1409_FilternUndSuchen.mdb.

Individuelle Suchfunktion

Wenn Sie eine Datenbank für andere Benutzer bereitstellen, so ist es möglicherweise sinnvoller, ihnen über Formulare programmierte Such- und Filterfunktionen anzubieten, weil die über die Oberfläche von Access verfügbaren nicht so ohne weiteres auffallen und etwas der Schulung bedürfen.

In Formularen etwa wird erst über das Kontextmenü deutlich, dass Filter aufrufbar sind oder sich Datensätze durchsuchen lassen.

Bei Datenblattansichten ist sind die Funktionen schon deutlicher sichtbar, weil sich hier bei Klick auf die Spaltenköpfe – zumindest unter Access 2007 und neuer – ein entsprechendes Menü öffnet.

Arbeiten Sie selbst mit der Datenbank, dann sollten Sie jedoch die Filterfunktionen der Oberfläche einmal gründlicher durchforsten.

Anforderungen an zu filternde Tabellen

Egal, ob Filtern oder Suchen im Fokus steht: Indizierung ist das Zauberwort. Das Indizieren von Tabellenfeldern wurde eben für diesen Zweck geschaffen. Es beschleunigt Suchvorgänge ungemein. Nehmen Sie eine Tabelle mit Zigtausend Datensätze und einem Feld für den Nachnamen. Ohne Indizierung müsste die Access Database Engine jeden einzelnen Datensatz aufrufen und den Nachnamen mit einem gesuchten Begriff vergleichen. Das würde sehr viel Zeit kosten. Ist ein Index auf das Feld gesetzt, so legt Access intern eine Datenstruktur an, ein Indextabelle, die über die Oberfläche von Access allerdings nicht sichtbar wird. In diesem Index sind die Datensatzinhalte etwa alphabetisch angeordnet und mit Sprungadressen versehen.

Der Name „Sacher“ wird gefunden, indem nur der Block zu „S“ analysiert wird, der an einer bestimmten Adresse liegt. Zumindest ist das das Prinzip – in der Realität sieht die Sache weitaus komplizierter aus und die eingesetzten BTree-Algorithmen sind auf Performance optimiert.

In Bild 2 sehen Sie den Tabellenaufbau der Beispieldatenbank mit der Haupttabelle tblStammdaten. Bild 1 sind deren Indizes aus der Entwurfsansicht abgebildet. Es ist auf fast alle Felder ein Index gesetzt. Das bedeutet, dass für jedes dieser Felder Such-, Filter, Sortierungs- und Gruppierungsfunktionen schneller ablaufen.

Indizes der Tabelle tblStammdaten

Bild 1: Indizes der Tabelle tblStammdaten

Beziehungslayout der Beispieltdatenbank

Bild 2: Beziehungslayout der Beispieltdatenbank

Alle Tabellenfelder also, bei denen davon auszugehen ist, dass sie später Suchvorgängen unterzogen werden, sollten mit einem Index versehen werden. Beim Feld für die Hausnummer der Stammdatentabelle ist dies nicht anzunehmen.

Warum legt Access nicht einfach automatisch für jedes Feld einen Index an Ganz einfach: die Indexstrukturen belegen viel Speicherplatz. Der Speicherbedarf der Indizes einer Tabelle kann sogar größer werden als deren Inhalte selbst!

Und außerdem bedarf es wesentlich mehr Rechenaufwand, um nicht nur etwa einen Namen in der Tabelle zu speichern, sondern diesen zusätzlich in eine Indexstruktur zu überführen und die in der Indextabelle an der richtigen Stelle unterzubringen.

Letzteres vollzieht Access übrigens beim Speichern eines Datensatzes aus Performancegründen nicht optimal. Sonst müssten die gesamten Indexstrukturen jedes Mal erneut aufgebaut werden.

Genau das passiert aber, wenn Sie die Anweisung Komprimieren und Reparieren für die Datenbank über das entsprechende Menü oder den Ribbon aufrufen. Deshalb sollte dieser Vorgang nach häufigen Speicher- oder Löschvorgängen in der Datenbank hin und wieder ausgeführt werden.

Filtern über das Menü und die Symbolleiste

Unter Access 2003 und früher finden sich die Funktionen zum Suchen und Filtern über den Hauptmenüeintrag Datensätze. Was sich hier ab Access 2007 geändert hat, erfahren Sie später.

öffnen Sie die Tabelle tblStammdaten in der Datenblattansicht. Die Menüleiste erweitert sich dann unter anderem um den Popup-Button Datensätze, der bei Klick das verschachtelte Untermenü in Bild 3 öffnet. Der obere Teil davon ist den Filter- und Sortierfunktionen spendiert.

Der Menübereich zum Filtern und Sortieren (Access 2003)

Bild 3: Der Menübereich zum Filtern und Sortieren (Access 2003)

Gleichzeitig blendet sich eine zusätzliche Symbolleiste, den den Namen Tabellendatenblatt trägt. Ein Ausschnitt mit den für das Filtern relevanten Buttons ist in Bild 5 zu sehen. Wenn Sie deren Symbole mit denen des Menüs vergleichen, wird klar, was sie bedeuten. Es spielt auch keine Rolle, ob Sie eine Funktion über das Menü oder einen Symbolleisten-Button aufrufen.

Die Menüleiste mit den Symbolen zum Filtern und Sortieren (A2003)

Bild 4: Die Menüleiste mit den Symbolen zum Filtern und Sortieren (A2003)

Rätsel gibt indessen die Symbolleiste Filtern/Sortieren auf, die Sie optional einblenden können, nachdem Sie sie über Extras > Anpassen… in der Liste der verfügbaren Leisten aktiviert haben (Bild 4). Seltsamerweise finden sich sich hier weder Buttons zum Sortieren, noch die spezielleren für das Filtern.

Die optionale Symbolleiste Filtern/Sortieren (Access 2003)

Bild 5: Die optionale Symbolleiste Filtern/Sortieren (Access 2003)

Nur das eine Trichtersymbol verweist auf den Filter. Es ist allerdings deaktiviert, wenn das geöffnete Datenblatt keinen gespeicherten Filter besitzt – dazu später mehr. Sie können diese Leiste also zunächst vergessen.

An der Funktion zum Sortieren gibt es nichts zu erläutern. Die aufsteigende Sortierung A-Z sortiert die aktive Spalte, also jene, in der sich der Cursor befindet, alphabetisch oder bei numerischem Inhalt nach dem Zahlenwert. Liegt der Cursor hingegen in einem OLE-Feld, wie bei der Spalte Bild der Stammdatentabelle, so deaktivieren sich die Sortierschaltflächen und -menüeinträge.

Die Suchfunktionen (Fernglassymbol) sollen später noch beleuchtet werden.

Auswahlbasierter Filter

Die Funktion dieses Filters setzt voraus, dass Sie eine beliebige Zelle des offenen Datenblatts markiert haben, wie in Bild 6 für den Ort „Berlin“.

Aktivieren des Auswahlbasierten Filters

Bild 6: Aktivieren des Auswahlbasierten Filters

Sobald Sie den Blitz-Button aktivieren, verschwinden alle Datensätze, bei denen Berlin nicht als Ort eingetragen war. Gleichzeitig wird der generelle Filter-Button (Trichter) markiert, um zu verdeutlichen, dass gerade ein Filter auf das Datenblatt gesetzt ist. Wenn Sie diesen markierten Button anklicken, wird der Filter wieder entfernt und alle Datensätze angezeigt.

Sie können aber auch die Zelle einer anderen Spalte markieren und erneut den Auswahlbasierten Filter aktivieren. Versuchen Sie das etwa für den Eintrag „Herr“ in der Spalte Anrede der Stammdatentabelle. Nun werden alle Datensätze angezeigt, die Kunden mit der Anrede „Herr“ aufweisen und in Berlin wohnen.

#Der Filter arbeitet also kumulativ. Diese Schritte können für eine beliebige Anzahl von Felder wiederholen und den Filter immer weiter kumulieren. Eine Rückgängig-Funktion dafür existiert allerdings nicht. Sie können die gesetzten Filter nur auf einen Schlag entfernen.

Auswahlausschließender Filter

Dieser Filter wirkt umgekehrt, wie der zuvor besprochene. Hätten Sie ihn im Beispiel von Bild 6 benutzt, so kämen alle Datensätze ohne den Ort Berlin auf den Schirm. Auch dieser Filter arbeitet kumulativ. Sie können so alle Herren ausschließen, und außerdem alle Kunden, die in Berlin wohnen.

Da eine derartige Filterung nicht so trivial ist und wohl auch seltener Anwendung findet, hat Microsoft ihr auch keinen eigenen Button in der Symbolleiste spendiert. Der Auswahlausschließende Filter lässt sich nur über das Menü oder Kontextmenü aufrufen.

Filter speichern

Es spielt keine Rolle, ob Sie im angezeigten Datenblatt gerade einen Filter aktiviert haben, oder ihn über Filter/Sortierung entfernen deaktiviert haben: Beim Schließen des Datenblatts über das Kreuzchen werden Sie gefragt, ob die änderungen gespeichert werden sollen. Bejahen Sie dies. Nun sollte man erwarten, dass beim nächsten öffnen der Filter wieder angewendet ist, wenn er zuvor aktiv war. Das ist jedoch nicht der Fall. Wohl aber tritt er wieder in Aktion, sobald Sie den Trichter anklicken. Wenn im Datenblatt kein Filter gespeichert wurde, so ist der Trichter-Button auch gar nicht erst aktivierbar. Damit erklärt sich auch, weshalb Access auch dann nach Speicherung fragt, wenn der Filter in der Ansicht „entfernt“ wurde. Der Begriff ist schlicht irreführend. Korrekter wäre die Bezeichnung „Filter deaktivieren“ gewesen.

Möchten Sie weiterlesen? Dann lösen Sie Ihr Ticket!
Hier geht es zur Bestellung des Jahresabonnements des Magazins Access [basics]:
Zur Bestellung ...
Danach greifen Sie sofort auf alle rund 400 Artikel unseres Angebots zu - auch auf diesen hier!
Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar