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/2010.

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

Lernen Sie ein Suchformular kennen, dass die Datensätze in Datenblättern filtert.

Techniken

Formulare

Voraussetzungen

Access 2000 und höher

Beispieldateien

Suchformulare.mdb

Shortlink

****

Suchformular für die Datenblattansicht

André Minhorst, Duisburg

Access liefert zwar eine hilfreiche Suchfunktion, mit der Sie die in der Datenblattansicht angezeigte Daten sortieren oder filtern können, aber wirklich übersichtlich und intuitiv ist diese nicht. Also legen wir selbst Hand an und bauen uns ein eigenes Suchformular, dass die verschiedenen Steuerelementtypen der Datenblattansicht berücksichtig und dieses gleich entsprechend der definierten Suche filtert.

Als Beispiel für unsere Lösung dient die Artikel-Tabelle der Südsturm-Datenbank - unsere optimierte Nordwind-Datenbank aus dem Beitrag Südsturm, die bessere Beispieldatenbank (www.access-im-unternehmen.de/411). Diese Tabelle enthält die drei möglichen Steuerelementtypen, die üblicherweise in der Datenblattansicht von Formularen dargestellt werden, nämlich Textfelder, Kombinationsfelder und Kontrollkästchen.

Die Konfiguration für die Anzeige von Daten in der Datenblattansicht sieht üblicherweise so aus, dass es ein Hauptformular gibt, dass einige Steuerelemente wie beispielsweise eine Suchen-Schaltfläche und ein Unterformular mit den eigentlichen Daten enthält. Dies ist allein der Tatsache geschuldet, dass Formulare in der Datenblattansicht keinen Kopf- oder Fußbereich anzeigen, in dem man weitere Steuerelemente unterbringen könnte. Das in diesem Beitrag demonstrierte Beispiel sieht wie in Abb. 1 aus.

pic001.png

Abb. 1: Beispiel für das Durchsuchen eines Datenblatts mit einem zusätzlichen Suchformular

Unser Suchformular soll folgende Voraussetzungen erfüllen:

  • Es soll per Mausklick auf eine Schaltfläche erscheinen.
  • Es soll im Vordergrund bleiben, aber das Bearbeiten von Daten im aufrufenden Formular erlauben.
  • Es soll für jedes Feld der Datenblattansicht ein Suchfeld enthalten.
  • Die eingegebenen Suchkriterien werden mit dem Operatur Und verknüpft.
  • Ein Klick auf die Schaltfläche Suchen des Formulars aktualisiert das Datenblatt des aufrufenden Formulars.
  • Gleichzeitig bleibt das Suchformular geöffnet, damit der Benutzer leicht die Suchkriterien anpassen und die Suche erneut durchführen kann.
  • Die Schaltfläche Leeren setzt alle Suchfelder zurück und sorgt dafür, dass wieder alle Datensätze im Datenblatt erscheinen.
  • Das Suchformular soll automatisch geschlossen werden, wenn das aufrufende Formular geschlossen wird.

Anzeige der Daten in der Datenblattansicht

Das Formular frmArtikel enthält die Schaltfläche cmdSuchen und das Unterformularsteuerelement sfm. Die Eigenschaften Datenherkunft und Standardansicht des Unterformular sfmArtikel stellen Sie auf tblArtikel und Datenblatt ein.

Außerdem ziehen Sie alle gewünschten Felder ( in der Beispieldatenbank alle) in den Detailbereich des Formularentwurfs.

Einbinden des Unterformulars in das Hauptformular

Wenn Sie dem Hauptformular bereits ein Unterformularsteuerelement hinzugefügt haben, brauchen Sie nur noch dessen Eigenschaft Herkunftsobjekt auf sfmArtikel einzustellen. Im Entwurf sieht der aktuelle Stand nun wie in Abb. 2 aus.

pic002.png

Abb. 2: Entwurf von Haupt- und Unterformular für die zu durchsuchenden Daten

Wenn Sie der Schaltfläche cmdSuchen nun noch die folgende Ereignisprozedur unterjubeln, ist dieser Teil der Lösung bereits erledigt:

Private Sub cmdSuche_Click()

    DoCmd.OpenForm "frmSuche"

    End Sub

Erstellen des Suchformulars

Das Suchformular heißt frmSuche und besitzt keine Datenherkunft und somit nur ungebundene Steuerelemente. Die drei Schaltflächen heißen cmdSuchen, cmdLeeren und cmdAbbrechen. Die Schaltfläche cmdAbbrechen hat die einfachste Aufgabe, die mit folgender Ereignisprozedur erledigt wird:

Private Sub cmdAbbrechen_Click()

    DoCmd.Close acForm, Me.Name

    End Sub

Für zusätzlichen Komfort stellen Sie die Eigenschaft Abbrechen dieser Schaltfläche auf den Wert Ja ein. Dies löst obige Prozedur aus, wenn der Benutzer auf Escape tippt. Außerdem sorgen Sie mit Popup gleich Ja dafür, dass das Formular immer im Vordergrund bleibt.

Kein Suchformular ohne aufrufendes Formular

Der Rest ist weniger trivial, aber nach einmaliger Programmierung vielfältig einsetzbar. Wir beschäftigen uns zunächst damit, dass das Formular beim Schließen des aufrufenden Formulars automatisch mit geschlossen werden soll. Hier gibt es zwei Möglichkeiten:

  • Sie bringen direkt im Klassenmodul des aufrufenden Formulars ein Ereignis unter, dass beim Schließen desselbigen ausgelöst wird (Beim Schließen, Beim Entladen) und das Formular frmSuchen ebenfalls schließt. Nachteil: Sie müssen hier erst prüfen, ob dieses Formular überhaupt noch geöffnet ist, da das Schließen sonst einen Fehler hervorruft.
  • Sie jubeln dem aufrufenden Formular über seine Objektvariable ein Ereignis unter, das beim Schließen (also wiederum durch eines der Ereignisse Beim Schließen oder Beim Entladen) ausgelöst wird. Unterjubeln deshalb, weil es physisch im Klassenmodul des Suchformulars angelegt wird, aber auf die Ereignisse eines Objekts reagiert, dass auf das aufrufende Formular verweist. Im Prinzip ist das der gleiche Vorgang, aber Sie brauchen keine Prüfung mehr, ob das zu schließende Formular überhaupt geöffnet ist.

Wir verwenden die zweite Variante, wozu wir zunächst eine Objektvariable namens frmParent deklarieren:

Private WithEvents frmParent As Form

Durch die Deklaration mit dem Schlüsselwort WithEvents können wir uns überhaupt erst in die Ereigniskette dieses Formulars einklinken. frmParant werden wir gleich mit einem Verweis auf das aufrufende Formular füllen. Wir brauchen noch einen weiteren Objektverweis, und zwar für den Zugriff auf das zu durchsuchende Unterformular in der Datenblattansicht. Dieses referenzieren wir mit dieser Objektvariablen:

Private frmDatasheet As Form

Beide Objektvariablen füllen wir gleich beim Öffnen des Suchformulars frmSuche. Dazu verwenden wir die Prozedur, die durch das Ereignis Beim Öffnen ausgelöst wird:

Private Sub Form_Open(Cancel As Integer)

    Dim ctl As Control

    Set ctl = Screen.ActiveControl

    Set frmParent = ctl.Parent

    frmParent.OnUnload = "[Event Procedure]"

    Set frmDatasheet = frmParent!sfm.Form

    End Sub

Die Prozedur ermittelt zunächst einen Verweis auf das aktive Steuerelement. Die Eigenschaft Screen.ActiveControl sollte hier tunlichst einen Verweis auf die Schaltfläche cmdSuchen zurückliefern. Über die Parent-Eigenschaft dieses Steuerelements erhalten wir einen Verweis auf das Formular, das dieses enthält. Das funktioniert auch, wenn das Formular mit der Schaltfläche cmdSuchen selbst als Unterformular in einem weiteren Unterformular untergebracht ist. Nur wenn die Schaltfläche und das Unterformular mit der Datenblattansicht nicht das gleiche übergeordnete Formular besitzen, müssen Sie diesen Code entsprechend umbauen.

Die folgende Zuweisung des Wertes [Event Procedure] an die Eigenschaft OnUnload bewirkt nichts anderes, als wenn Sie von Hand den Wert [Ereignisprozedur] in das entsprechende Eigenschaftsfeld eintragen würden - allerdings muss sich die passende Ereignisprozedur im gleichen Klassenmodul wie die Deklaration der Objektvariablen befinden (also in dem des Suchformulars). Dort legen Sie auch die benötigte Ereignisprozedur an, die schlicht das Suchformular schließt:

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:

Suchfunktionen von einfach bis komplex

Globale Suche

Formularposition speichern und wiederherstellen

Suchformularassistent

Unterformulare: Daten anlegen und löschen

Tipps und Tricks

Transparenz und andere Effekte in Formularen

Modale Dialoge mal anders

Zugriff auf Formulare

Formulare für die Dateneingabe

Lookup-Daten verwalten

Validieren mit Klasse

Fehlertolerantes Suchen

© 2003-2015 André Minhorst Alle Rechte vorbehalten.