Home > Artikel > Ausgabe 4/2018 > Markierte Datensätze verarbeiten

Markierte Datensätze verarbeiten

Achtung: Sie sind nicht angemeldet. Wenn Sie Abonnent sind und sich anmelden, lesen Sie den kompletten Artikel, laden das PDF herunter oder probieren die Beispieldatenbank aus (sofern vorhanden).

Wenn Sie gern mit der Datenblattansicht arbeiten, ist Ihnen vermutlich schon aufgefallen, dass es keine Möglichkeit, mehrere Datensätze gleichzeitig zu markieren – außer, die Datensätze hängen zusammen. Mit der bedingten Formatierung und ein paar kleinen Tricks gelingt es uns allerdings doch, Datensätze etwa per Doppelklick zu selektieren und wieder abzuwählen. Dieser Artikel zeigt, wie es funktioniert.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1804_MarkierteDatensaetzeVerarbeiten.accdb.

Vorbereitung

Im Artikel Datensätze markieren mit bedingter Formatierung haben wir gezeigt, wie Sie durch geschickten Einsatz der bedingten Formatierung komplette Datensätze in der Datenblattansicht etwa eines Unterformulars markieren können – auch wenn die Datensätze nicht zusammenhängen (siehe Bild 1). Neben der Möglichkeit, einen Datensatz per Doppelklick auf eines der Steuer­elemente Einträge aus- oder abzuwählen, können Sie auch per Klick auf eine der beiden Schaltflächen Alle auswählen oder Alle abwählen die kompletten Datensätze aus- oder abwählen.

Markierung von Datensätzen in der Datenblattansicht

Bild 1: Markierung von Datensätzen in der Datenblattansicht

Ausgewählte Einträge ermitteln

Während Sie, wenn Sie die gleiche Vorgehensweise etwa mit einem Listenfeld abbilden, direkt über die Eigenschaften des Listenfeldes ermitteln müssen, welcher Eintrag markiert ist und welcher nicht, haben wir hier den Vorteil, dass wir den Zustand eines jeden Eintrags in der Tabelle tblKundenMarkierungen gespeichert haben. Das heißt, dass wir, wenn wir etwa alle markierten Einträge weiterverarbeiten wollen, direkt auf die zugrunde liegende Tabelle zugreifen können und nicht etwa auf das Datenblatt zugreifen müssen. Die Tabelle tblKundenMarkierungen sieht etwa wie in Bild 2 aus. Sie enthält grundsätzlich nur Einträge, die bereits einmal markiert waren. Einige davon können auch durch erneutes Doppelklicken abgewählt worden sein. Wenn wir nun alle markierten Datensätze ermitteln wollen, brauchen wir also nur die Tabelle tblKundenMarkierungen nach Datensätzen zu durchforsten, deren Feld Markierung den Wert Ja enthält.

Speicherung der markierten Datensätze

Bild 2: Speicherung der markierten Datensätze

In der Regel werden wir aber direkt auf die kompletten Daten zugreifen wollen, sodass wir doch die Abfrage qryKundenMarkierungen hinzuziehen werden, welche alle Felder der Tabelle tblKunden liefert. Diese wandeln wir nun in Form der Abfrage qryMarkierteKunden etwas ab, sodass diese im Entwurf wie in Bild 3 aussieht. Die Abfrage ist wie die zuerst genannte Abfrage aufgebaut, enthält aber für das Feld Markierung noch den Vergleichswert Wahr als Kriterium.

Abfrage, die nur die markierten Kunden liefert

Bild 3: Abfrage, die nur die markierten Kunden liefert

Damit liefert diese Abfrage nur noch diejenigen Datensätze der Tabelle tblKunden, für die erstens ein verknüpfter Datensatz in der Tabelle tblKundenMarkierungen vorliegt und zweitens das Feld Markierung dieser Tabelle den Wert True enthält. In der Datenblattansicht liefert dieser Abfrage nun etwa das Ergebnis aus Bild 4.

Abfrage, die nur die markierten Kunden liefert, in der Datenblattansicht

Bild 4: Abfrage, die nur die markierten Kunden liefert, in der Datenblattansicht

Markierte Datensätze ausgeben

Diese können wir nun beispielsweise nutzen, um in einem Bericht eine Auflistung aller aktuell aufgelisteten Datensätze auszugeben. Dazu fügen wir der Beispieldatenbank einen neuen, leeren Bericht namens rptSelektierteKunden hinzu. Für die Eigenschaft Datensatzquelle legen wir die zuvor erstellte Abfrage qryMarkierteDatensaetze fest. Damit können wir nun die gewünschten Felder aus der Feldliste in den Detailbereich des Berichtsentwurfs ziehen. Hier werden diese nun untereinander angezeigt, wir wünschen uns allerdings eine Darstellung in Tabellenform. Das können wir mit den Layout-Möglichkeiten des Berichtsentwurfs relativ schnell bewerkstelligen. Wie das genau geht, erfahren Sie im Beitrag Tabellerische Berichtslayouts. Das Ergebnis sieht nach ein paar Schönheitskorrekturen wie in Bild 5 aus.

Entwurfsansicht des Berichts zur Ausgabe der markierten Kunden

Bild 5: Entwurfsansicht des Berichts zur Ausgabe der markierten Kunden

Wenn wir nun in die Seitenansicht wechseln, erhalten wir den Bericht aus Bild 6. Der Bericht zeigt tatsächlich nur die ausgewählten Datensätze aus dem Formular an.

Bericht nur mit den markierten Datensatzen

Bild 6: Bericht nur mit den markierten Datensatzen

Selektierte Kunden im Bericht hervorheben

Wir wollen nun noch einen weiteren Bericht programmieren, der diesmal zwar alle Kunden anzeigt, aber alle markierten Kunden seinerseits mit einer Markierung versieht. Diesen Bericht wollen wir rptMarkierteKunden nennen. Er ist genauso aufgebaut wie der vorherige Bericht, wir können diesen also einfach kopieren. Lediglich die Datensatzquelle müssen wir anpassen. Diese soll die Abfrage qryKundenMarkierungen enthalten.

Damit der Bericht die Zeilen mit den zuvor im Formular markierten Kunden ebenfalls markiert, arbeiten wir wieder mit der bedingten Formatierung. Eines vorweg: Im Bericht müssen wir nicht mit den Tricks arbeiten, die im Formular notwendig waren, um das Flackern beim Aus- oder Abwählen eines der Einträge nötig waren.

Hier brauchen wir uns nur darum zu kümmern, dass die entsprechenden Datensätze markiert hervorgehoben werden.

Dafür haben wir eine andere Herausforderung: Die Textfelder mit den Daten der Datensatzquelle liegen nicht wie in der Datenblattansicht direkt nebeneinander, sodass im Bericht nicht markierte Freiräume zwischen den Textfeldern entstehen würden. Was tun? Wir fügen ein eigenes Textfeld namens txtMarkierung zum Detailbereich des Bericht hinzu. Dieses binden wir über die Eigenschaft Steuerelementinhalt an das Feld Markierung. Danach vergrößern wir das Steuer­element so, dass es die gesamte Höhe und Breite des Detailbereichs einnimmt (siehe Bild 7).

Einfügen eines eigenen Textfeldes für die Markierung

Bild 7: Einfügen eines eigenen Textfeldes für die Markierung

In den Hintergrund

Damit es die anderen Steuer­elemente nicht überdeckt, verschieben wir das Textfeld txtMarkierung noch in den Hintergrund. Dazu klicken Sie mit der rechten Maustaste auf das Steuer­element und wählen den Kontextmenü-Eintrag Position|In den Hintergrund aus.

Bedingte Formatierung hinzufügen

Danach weisen wir dem Textfeld die bedingte Formatierung hinzu, die dafür sorgt, dass das Textfeld mit einem farbigen Hintergrund versehen wird, wenn dieses den Wert -1 enthält. Dazu markieren Sie wieder das Textfeld. Das könnte sich möglicherweise schwieriger gestalten als erwartet, denn wir haben es ja gerade hinter die anderen Textfelder verschoben. Um es zuverlässig zu markieren, können Sie es einfach über das Kombinationsfeld im Eigenschaften-Fenster auswählen (siehe Bild 8). Danach zeigen Sie den Dialog zum Anlegen einer bedingten Formatierung mit dem Ribbonbefehl Format|Steuerelementformatierung|Bedingte Formatierung an und klicken hier auf die Schaltfläche Neue Regel.

Markieren eines Steuerelements über das Eigenschaften-Fenster

Bild 8: Markieren eines Steuerelements über das Eigenschaften-Fenster

Dies öffnet den Dialog aus Bild 9, wo wir diesmal direkt den Feldwert mit dem Wert -1 vergleichen (also True). Dafür legen wir als Formatierung eine alternative Hintergrundfarbe fest. Damit können Sie den Dialog auch direkt wieder schließen.

Anlegen der bedingten Formatierung für das Hintergrund-Textfeld

Sie haben das Ende des frei verfügbaren Teil dieses Artikels erreicht!

Wenn Sie mehr lesen und auf viele weitere Artikel zugreifen möchten, melden Sie sich als Abonnent unter Login an. Falls nicht, bestellen Sie doch einfach ein Jahresabonnement!