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 2/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

Markieren Sie Datensätze auf verschiedene Arten und arbeiten Sie anschließend mit markierten Datensätzen weiter.

Techniken

Formulare, Tabellen

Voraussetzungen

Access 2002 und höher

Beispieldateien

IndividuelleDatenauswahl.mdb

Shortlink

www.access-im-unternehmen.de/708

Individuelle Datenauswahl

André Minhorst, Duisburg

In Foren und Newsgroups wird immer wieder nach Möglichkeiten gefragt, einen oder mehrere Datensätze individuell auszuwählen, um anschließend irgendetwas mit diesen Datensätzen zu erledigen - beispielsweise um einen Bericht auf Basis der ausgewählten Daten zu füllen oder die Empfänger eines Serienbriefs zu bestimmen. Dieser Beitrag stellt verschiedene Möglichkeiten vor, um dies zu realisieren.

Datensätze auswählen

Manchmal streckt selbst der ausgeklügeltste Filter-Mechanismus die Flügel - nämlich dann, wenn die Auswahl von Daten auf Informationen basiert, welche die Datenherkunft nicht hergibt.

Der simpelste Fall: Sie möchten allen Kunden, die letztes Jahr besonders nett zu Ihnen waren, einen lieben Brief zu Weihnachten schicken. Und solange Ihre Kundentabelle kein Feld namens »Nettigkeit« enthält, müssen Sie die Auswahl wohl von Hand treffen.

Zum Auswählen bestimmter Datensätze nach individuellen Kriterien gibt es verschiedene Ansätze, deren Einsatz davon abhängt, wie die Ergebnismenge weiterverarbeitet werden soll und wie Sie die Daten anzeigen möchten.

Letzteres ist einfach, zumindest wenn Sie sich auf die Bordmittel von Access beschränken: Sie können die auszuwählenden Daten dann entweder in einem Unterformular in der Datenblattansicht anzeigen oder in einem Listenfeld. Das Listenfeld bietet dank Mehrfachauswahl eigentlich die schickere Variante, da die ausgewählten Datensätze automatisch farbig hinterlegt werden.

Das Unterformular in der Datenblattansicht können Sie eigentlich nur für die Mehrfachauswahl einsetzen, wenn Sie der Datenherkunft ein Ja/Nein-Feld zum Festlegen des Zustands hinzufügen. Auch dort gibt es eine Möglichkeit, ausgewählte Datensätze farbig hervorzuheben.

Ziel der Mehrfachauswahl

Unter Ziel verstehen wir die Art des Dokuments oder der Aktion, für welche die Datensätze ausgewählt werden. Davon hängt maßgeblich ab, welche der nachfolgend vorgestellten Techniken zum Auswählen mehrerer Datensätze Sie einsetzen können.

Für einen Word-Serienbrief, den Sie auf klassische Weise von Word aus mit den Daten einer Access-Tabelle oder -Abfrage füllen möchten, brauchen Sie beispielsweise eine entsprechende Tabelle oder Abfrage als Datenquelle. Dies bedeutet, dass Sie die Informationen über die Auswahl in einer Tabelle speichern müssen.

Wenn Sie den Serienbrief anders erstellen, etwa indem Sie von der Access-Anwendung aus jeweils eine Dokumentvorlage öffnen, diese per VBA automatisiert mit den ausgewählten Daten füllen und dann speichern und/oder drucken, brauchen Sie die Information über die ausgewählten Datensätze nicht in einer Tabelle zu speichern: Sie können diese dann direkt aus dem für die Auswahl verwendeten Element der Benutzeroberfläche, also dem Unterformular in der Datenblattansicht oder dem Listenfeld, entnehmen.

Beispieldaten und Beispiele

Der Einfachheit halber verwenden wir zu Testzwecken eine Tabelle namens tblPersonen mit den drei Feldern ID, Vorname und Nachname, die wir mit einigen Datensätzen gefüllt haben.

In den nachstehenden Abschnitten schauen wir uns die folgenden Beispiele für die individuelle Auswahl von Daten an:

  • Mehrfachauswahl im Listenfeld
  • Mehrfachauswahl im Datenblatt mit Ja/Nein-Feld in der Datenherkunft
  • Mehrfachauswahl im Datenblatt mit 1:1-Beziehung
  • Mehrfachauswahl im Datenblatt mit Markierung
  • Mehrfachauswahl im Datenblatt mit temporärem Recordset

Ziel aller Beispiele ist es, über eine Schaltfläche namens cmdStart eine Liste der Primärschlüsselfelder der ausgewählten Datensätze im Direktfenster auszugeben. Wenn dies möglich ist, können Sie auch alle weiteren geplanten Aktionen mit den ausgewählten Daten durchführen.

Mehrfachauswahl im Listenfeld

Die Mehrfachauswahl im Listenfeld bietet sich eher für solche Fälle an, in denen Sie die Daten ad hoc verarbeiten und nicht speichern wollen. Dazu füllen Sie das Listenfeld namens lstMehrfachauswahl mit der gewünschten Datenherkunft tblPersonen.

Stellen Sie die beiden Eigenschaften Spaltenanzahl und Spaltenbreiten auf 3 und 1cm;4cm;4cm ein, damit alle drei Spalten angezeigt werden. Außerdem legen Sie für die Eigenschaft Mehrfachauswahl den Wert Erweitert fest.

Dies bedeutet, dass der Benutzer bei gedrückter Strg-Taste einzelne Einträge aus- und abwählen und durch zweimaliges Betätigen der Maustaste bei gedrückter Umschalttaste alle Elemente vom ersten bis zum zweiten angeklickten Element auswählen kann. Ein einfacher Klick ohne Umschalt- oder Strg-Taste hebt die Auswahl wieder auf.

Die Start-Schaltfläche des Formulars aus Abb. 1 löst die folgende Ereignisprozedur aus Listing 1 aus.

Listing 1: Ausgewählte Einträge des Listenfelds auslesen

Private Sub cmdStart_Click()

    Dim varIndex As Variant

    Dim lngPersonID As Long

    For Each varIndex In Me!lstMehrfachauswahl.ItemsSelected

        lngPersonID = _

        Me!lstMehrfachauswahl.ItemData(varIndex)

        'Hier etwas mit lngPersonID erledigen

        Debug.Print lngPersonID

    Next varIndex

End Sub

pic001.png

Abb. 1: Individuelle Mehrfachauswahl im Listenfeld

Die For Each-Schleife durchläuft alle markierten Datensätze, auf die sie über die Auflistungs-Eigenschaft ItemsSelected des Listenfelds zugreift. Die Laufvariable varIndex liefert jeweils den Index der aktuell durchlaufenen Zeile zurück.

Um darüber auf den Wert der gebundenen Spalte, in diesem Falle mit dem Feld ID der Datenherkunft ausgestattet, zuzugreifen, verwenden Sie die ItemData-Eigenschaft unter Angabe von varIndex.

Einfache Mehrfachauswahl

Für weniger gewandte Benutzer mag die Einstellung Einfach für die Eigenschaft Mehrfachauswahl eine sinnvolle Alternative sein. Mit dieser Einstellung braucht man einen Eintrag einfach nur anzuklicken, um ihn auszuwählen, und wenn man ihn nicht mehr will, klickt man einfach erneut darauf.

Die Funktion zur Ermittlung der markierten Einträge funktioniert genau so wie bei der Einstellung Erweitert.

Mehrfachauswahl im Datenblatt mit Ja/Nein-Feld in der Datenherkunft

Die einfachste Möglichkeit, die Datensätze unserer Tabelle tblPersonen in der Datenblattansicht eines Unterformulars zu markieren, ist ein Ja/Nein-Feld in der betroffenen Tabelle (s. Abb. 2).

pic002.png

Abb. 2: Kopie der Beispieltabelle mit einem Ja/Nein-Feld zum Speichern des Markiert-Status

Erstellen Sie ein Formular namens sfmPersonenJaNein und weisen Sie die Tabelle tblMehrfachauswahlJaNein der Eigenschaft Datenherkunft zu.

Ziehen Sie alle Felder aus der Feldliste in den Detailbereich der Entwurfsansicht und stellen Sie die Eigenschaft Standardansicht auf Datenblatt ein. Schließen Sie das Formular.

Erstellen Sie ein weiteres Formular, ziehen Sie das Unterformular aus dem Datenbankfenster beziehungsweise dem Navigationsbereich in den Detailbereich des Formularentwurfs und fügen Sie eine Schaltfläche namens cmdStart hinzu.

Speichern Sie das Formular, das in der Formularansicht nun wie in Abb. 3 aussehen sollte, unter dem Namen frmMehrfachauswahlJaNein.

pic003.png

Abb. 3: Mehrfachauswahl per Ja/Nein-Feld im Datenblatt

Die Ereignisprozedur, die durch die Schaltfläche ausgelöst wird, hat leichtes Spiel:

Sie braucht einfach nur ein Recordset auf Basis der Tabelle tblPersonen zu erzeugen, wobei eine WHERE-Bedingung die Datensätze auf diejenigen beschränkt, deren Feld Markiert den Wert True aufweist.

Diese durchläuft man einfach über die gängige Do While-Schleife und stellt mit dem Datensatz an, was auch immer man möchte (s. Listing 2).

Listing 2: Durchlaufen der Datensätze der Datenherkunft eines Unterformulars

Private Sub cmdStart_Click()

    Dim db As DAO.Database

    Dim rst As DAO.Recordset

    Dim lngPersonID As Long

    Set db = CurrentDb

    Set rst = db.OpenRecordset("SELECT * FROM

    tblPersonenJaNein WHERE Markiert = True", _

    dbOpenDynaset)

    Do While Not rst.EOF

        lngPersonID = rst!ID

        'Etwas mit lngPerson erledigen

        Debug.Print lngPersonID

        rst.MoveNext

    Loop

    Set db = Nothing

End Sub

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

Formularposition speichern und wiederherstellen

Kein Datensatz- und Positionswechsel bei Requery

Zugriff auf Daten in Formularen und Steuerelementen

Benutzerverwaltung

Drag and Drop in der Datenblattansicht

Transparenz und andere Effekte in Formularen

Modale Dialoge mal anders

Formulare für die Dateneingabe

Daten visualisieren mit HTML

Listenfelder von A-Z

Validieren mit Klasse

© 2003-2015 André Minhorst Alle Rechte vorbehalten.