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 5/2006.

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

Suchen, filtern und sortieren Sie mit DAO.

Techniken

VBA, DAO, Datenmodellierung

Voraussetzungen

Access 97 und höher

Beispieldatenbank

DAO97.mdb, DAO00.mdb

DAO, Teil III: Suchen, filtern und sortieren

André Minhorst, Duisburg

Wer DAO verwendet, um per VBA Datensätze mit Datensätzen zu arbeiten, kann diese auch durchsuchen, filtern und sortieren. Der vorliegende Beitrag zeigt, welche Möglichkeiten es dazu gibt.

Suchen von Datensätzen

Wer in DAO mit Datensätzen arbeitet, um diese auszugeben, zu ändern oder zu löschen, will nicht unbedingt alle in der Datenherkunft enthaltenen Datensätze verwenden.

Um die gewünschten Datensätze zu finden, gibt es mehrere Möglichkeiten: Man schränkt die Datensatzgruppe schon beim Öffnen ein oder man sucht nach dem Öffnen nach den passenden Datensätzen. In letzterem Fall gibt es wiederum einige Möglichkeiten, die Sie in den folgenden Abschnitten kennen lernen werden.

Suchen beim Erzeugen des
Recordsets

Wenn möglich, sollten Sie Such- und Filtervorgänge bereits beim Erzeugen des Recordset-Objekts durchführen. Reichlich Möglichkeiten dazu finden Sie im ersten Teil dieser Beitragsreihe (DAO, Teil 1: Database- und Recordsetobjekt, Shortlink 354):

  • Recordsets auf Basis von Abfragen (Kapitel 3.3)
  • Recordsets mit dynamischen Parametern (Kapitel 3.4)
  • Der Vorteil dieser Methoden ist, dass direkt nur die benötigten Datensätze in das Recordset geschrieben werden. Das ist wesentlich performance-schonender, als wenn man zunächst ein Recordset mit allen zu Grunde liegenden Daten füllt und dann mit den passenden DAO-Methoden nach den gewünschten Daten sucht.

    Suche per Find...-Methode

    Diese Möglichkeit geht davon aus, dass die Datensatzgruppe mehr als nur die gesuchten Datensätze enthält.

    Um in einer Datensatzgruppe Datensätze mit bestimmten Eigenschaften zu suchen, verwendet man die FindFirst-, FindNext-, FindLast- oder FindPrevious-Methode. Diese erwartet jeweils einen Kriterienausdruck, der dem WHERE-Teil einer SQL-Abfrage entspricht. Voraussetzung für den Einsatz dieser Methoden ist, dass das Recordset mit dem Wert acOpenDynaset oder acOpenSnapshot für den Parameter Type geöffnet wurde.

    Die Eigenschaft NoMatch prüft nach dem Durchführen einer dieser Methoden, ob die Suche ein Ergebnis ergeben hat. Die Routine aus Quellcode 1 zeigt die Anwendung der FindFirst- und der FindNext-Methode, wobei alle Datensätze ermittelt werden sollen, deren Artikelname mit dem Buchstaben A beginnt.

    Quellcode 1: Datensätze suchen mit der Find-Methode

    Public Function SuchenPerFind()

        ...

        Dim strKriterium As String

        Set db = CurrentDb

        Set rst = db.OpenRecordset("Artikel", dbOpenDynaset)

        strKriterium = "Artikelname LIKE 'A*'"

        rst.FindFirst strKriterium

        Do While Not rst.NoMatch

            '...etwas mit den Datensätzen tun

            Debug.Print rst!Artikelname

            rst.FindNext strKriterium

        Loop

        ...

    End Function

    Abb. 1: Verwalten von Indizes

    Die FindFirst-Methode versucht, den ersten Datensatz mit dem angegebenen Kriterium zu finden, die NoMatch-Eigenschaft prüft, ob dies erfolgreich war. Falls ja, gibt die Routine den Artikelnamen aus und versucht mit FindNext, den nächsten passenden Datensatz zu finden.

    Die FindPrevious- und die FindLast-Methode funktionieren ähnlich, damit können Sie etwa eine Datensatzgruppe von hinten nach vorne durchsuchen.

    Suchen in indizierten Feldern mit Seek

    Im Gegensatz zu den Find-Methoden können Sie die Seek-Methode nur zusammen mit Datensatzgruppen des Typs dbOpenTable einsetzen. Außerdem muss das Feld, das durchsucht werden soll, indiziert sein.

    Ein weiterer Unterschied zu den Find-Methoden ist, dass man nur ein Feld einer Datensatzgruppe gleichzeitig als Kriterium verwenden kann.

    Index festlegen

    Indizes sorgen neben dem Sichern der Eindeutigkeit der in Feldern enthaltenen Daten auch dafür, dass Access interne Tabellen anlegt, die das schnelle Auffinden von Datensätzen mit bestimmten Werten erlauben (siehe auch Indizierung mit Access, Shortlink 308).

    Abb. 1 zeigt die Indizes der Tabelle Artikel. Sie erhalten diese Anzeige, wenn Sie in der Entwurfsansicht einer Tabelle den Menüeintrag Ansicht/Indizes auswählen.

    Das Beispiel aus Quellcode 2 zeigt, wie Sie Datensätze mit Seek durchsuchen: Sie geben zunächst mit der Index-Eigenschaft des Recordset-Objekts an, welches Feld beziehungsweise welche Felder Sie durchsuchen möchte - zu Letzterem später mehr.

    Die zwei Parameter der Seek-Methode selbst legen den Vergleichsoperator sowie den Vergleichswert fest. Seek ist relativ unflexibel: Es erlaubt lediglich die Vergleichsoperatoren
    gleich (=), größer gleich (>=), kleiner gleich (<=) und ungleich (<>).

    Quellcode 2: Artikel suchen per Seek

    Public Function SuchenPerSeek()

        ...

        Dim strOperator As String

        Dim strVergleichswert As String

        Set db = CurrentDb

    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.