Datensätze markieren mit bedingter Formatierung

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_DatensaetzeMarkierenMitBedingterFormatierung.accdb.

Vorbereitung

Als Beispiel wollen wir ein Unterformular nutzen, dass die Daten der Tabelle tblKunden in der Datenblattansicht anzeigt. Im Hauptformular wollen wir dann Schaltflächen unterbringen, mit denen wir entweder alle Einträge des Unterformulars selektieren können oder die Selektierung komplett aufheben.

Dazu legen wir zunächst das Unterformular namens sfmKunden an. Dieses statten wir über die Eigenschaft Datenherkunft mit der Tabelle tblKunden als Datenquelle aus. Ziehen Sie dann alle Felder der Datenherkunft aus der Feldliste in den Detailbereich des Formularentwurfs. Außerdem stellen wir die Eigenschaft Standardansicht auf Datenblatt ein (siehe Bild 1). Schließen Sie das Formular dann, damit wir es im nächsten Schritt als Unterformular zum Hauptformular hinzufügen können.

Entwurf des Unterformulars

Bild 1: Entwurf des Unterformulars

Anschließend legen wir das Hauptformular namens frmKunden an und öffnen dieses in der Entwurfsansicht. Diesem fügen wir das Formular sfmKunden als Unterformular hinzu, indem wir es aus dem Navigationsbereich in den Detailbereich des Formularentwurfs ziehen. Außerdem stellen wir für das Hauptformular die Eigenschaften Datensatzmarkierer, Navigationsschaltflächen, Trennlinien und Bildlaufleisten auf den Wert Nein und Automatisch zentrieren auf Ja ein. Damit die Größe des Unterformulars beim ändern der Größe des Hauptformulars automatisch angepasst wird, legen wir außerdem für die beiden Eigenschaften Horizontaler Anker und Vertikaler Anker noch den Wert Beide fest (siehe Bild 2).

Entwurf des Hauptformulars

Bild 2: Entwurf des Hauptformulars

Feld für das temporäre Speichern als markierter Datensatz hinzufügen

Nun haben wir zwar schon das Formular aufgebaut, aber wenn wir eine bedingte Formatierung definieren wollen, benötigen wir dazu bestimmte Bedingungen, die erfüllt sein müssen. Wie aber wollen wir eine Bedingung definieren, die besagt, dass ein Datensatz gerade markiert ist oder nicht

Dazu benötigen wir ein eigenes Feld, dass wir entweder direkt der Tabelle hinzufügen oder einer weiteren Tabelle, die wir dann per 1:1-Beziehung mit der eigentlichen Tabelle verknüpfen. Da es sein kann, dass Sie diese Technik an Tabellen anwenden wollen, die aus einer Datenbank stammen, deren Entwurf Sie nicht ändern können, wählen wir die zweite Variante. Also legen wir zunächst eine neue Tabelle namens tblKundenMarkierungen an.

Diese erhält drei Felder. Das erste ist das Primärschlüsselfeld dieser Tabelle, das zweite ein Fremdschlüsselfeld, welches auf den Primärschlüssel des Feldes tblKunden verweist und das dritte das Ja/Nein-Feld, mit dem wir festlegen, ob der mit dem diesem Datensatz verknüpfte Datensatz der Tabelle tblKunden als ausgewählt gekennzeichnet werden soll.

Wichtig für die Herstellung einer 1:1-Beziehung zwischen den Tabellen tblKunden und tblKundenBeziehungen ist, dass beide an der Beziehung beteiligten Felder einen eindeutigen Index haben. Beim Primärschlüsselfeld KundeID der Tabelle tblKunden ist das per Definitionem der Fall, beim Fremdschlüsselfeld KundeID der Tabelle tblKundenMarkierungen müssen wir nachhelfen. Dazu stellen wir die Eigenschaft Indiziert für dieses Feld im Entwurf der Tabelle auf den Wert Ja (Ohne Duplikate) ein (siehe Bild 3).

Entwurf der Zusatztabelle tblKundenMarkierungen

Bild 3: Entwurf der Zusatztabelle tblKundenMarkierungen

Beziehung hinzufügen

Danach wollen wir die Beziehung zwischen den beiden Tabellen tblKunden und tblKundenMarkierungen hinzufügen. Dazu öffnen wir über den Ribbonbefehl Datenbanktools|Beziehungen|Beziehungen das Beziehungen-Fenster. Diesem fügen wir die Tabellen tblKunden und tblKundenMarkierungen hinzu, sofern diese noch nicht sichtbar sind.

Dann erstellen wir die Beziehung zwischen den beiden Tabellen. Dabei ist es wichtig, dass Sie vom Feld KundeID der Tabelle tblKunden ausgehend auf das gleichnamige Feld der Tabelle tblKundenMarkierungen ziehen – andersherum erhalten Sie beim Speichern der Beziehung eine Fehlermeldung, wenn Sie für die Beziehung referenzielle Integrität festgelegt haben.

Der Grund ist einfach: In diesem Fall müsste es für jeden Eintrag im Feld KundeID der Tabelle tblKunden nämlich einen passenden Eintrag im entsprechenden Feld der Tabelle tblKundenMarkierungen geben. Und das ist gerade dann nicht der Fall, wenn die Tabelle soeben erst angelegt wurde.

Also ziehen wir die Beziehung andersherum auf. Im nun erscheinenden Dialog Beziehungen bearbeiten erscheint dann im unteren Bereich auch gleich 1:1 als Beziehungstyp.

Hier aktivieren Sie noch die Option Mit referenzieller Integrität. Sie sollten auch noch die Option Löschweitergabe an verwandte Datensätze aktivieren, damit die Datensätze der Tabelle tblKundenMarkierungen, die mit einem zu löschenden Datensatz der Tabelle tblKunden in Beziehung stehen, auch direkt mit gelöscht werden (siehe Bild 4).

Beziehung zwischen den Tabellen tblKunden und tblKundenMarkierungen

Bild 4: Beziehung zwischen den Tabellen tblKunden und tblKundenMarkierungen

Abfrage zum Zusammenführen der Daten erstellen

Wenn wir wollen, dass das Feld Markiert der Tabelle tblKundenMarkierungen bei den noch zu definierenden bedingten Formatierungen im Unterformular berücksichtigt wird, müssen wir dieses über die Datenherkunft verfügbar machen. Dazu erstellen wir eine neue Abfrage namens qryKundenMarkierungen. Dieser fügen wir die beiden Tabellen tblKunden und tblKundenMarkierungen hinzu. Aus der Tabelle tblKunden übernehmen wir alle Felder, aus der Tabelle tblKundenMarkierungen fügen wir noch das Feld Markierung zum Entwurfsraster der Abfrage hinzu (siehe Bild 5).

Abfrage mit den beiden Tabellen tblKunden und tblKundenMarkierungen

Bild 5: Abfrage mit den beiden Tabellen tblKunden und tblKundenMarkierungen

Wenn wir nun in die Datenblattansicht der Abfrage wechseln, liefert diese allerdings keine Datensätze zurück (siehe Bild 6). Das ist auch kein Wunder, denn aktuell ist die Abfrage ja auch so definiert, dass Sie alle Datensätze zurückliefert, für dies es übereinstimmende Werte im Feld KundeID der beiden beteiligten Tabellen tblKunden und tblKundenMarkierungen gibt.

Die Abfrage qryKundenMarkierungen liefert keine Datensätze zurück.

Bild 6: Die Abfrage qryKundenMarkierungen liefert keine Datensätze zurück.

Diese kleine Nachlässigkeit wollen wir noch korrigieren. Dazu wechseln wir nochmals zum Entwurf der Abfrage und klicken doppelt auf den Beziehungspfeil zwischen den beiden Tabellen. Hier wählen wir nun die Option wie in Bild 7 aus. Dies sorgt dafür, dass alle Datensätze der Tabelle tblKunden im Abfrageergebnis erscheinen – selbst wenn die Tabelle tblKundenMarkierungen keinen einzigen Datensatz enthält.

Finetuning der Verknüpfungseigenschaften

Bild 7: Finetuning der Verknüpfungseigenschaften

Ein Wechsel zurück zur Datenblattansicht liefert dann auch alle Datensätze der Tabelle tblKunden zurück – inklusive des Feldes Markierung der Tabelle tblKundenMarkierung. Dieses zeigt den undefinierten Status für Kontrollkästchen an, da dieses Feld ja für diese Konstellation der verknüpften Tabellen noch gar keine Daten aufweist. Die Tabelle tblKundenMarkierungen ist zu diesem Zeitpunkt noch leer. Nun aktivieren wir aber einmal das Feld Markierung für einige Datensätze der Abfrage (siehe Bild 8).

Setzen des Feldes Markierung auf den Wert Ja

Bild 8: Setzen des Feldes Markierung auf den Wert Ja

Wenn wir danach die Tabelle tblKundenMarkierungen öffnen, finden wir für jeden der drei zuvor in der Abfrage qryKundenMarkierungen angehakten Datensätze einen neuen Eintrag vor (siehe Bild 9).

Neue Einträge in der Tabelle tblKundenMarkierungen

Bild 9: Neue Einträge in der Tabelle tblKundenMarkierungen

Datenherkunft des Unterformulars austauschen

Nun öffnen wir erneut das Unterformular sfmKunden in der Entwurfsansicht und tauschen in der Eigenschaft Datensatzquelle die Tabelle tblKunden gegen die soeben erstellte Abfrage qryKundenMarkierungen aus. Wenn wir das Unterformular dann speichern und schließen und das Hauptformular in der Formularansicht öffnen, ändert sich erst einmal nichts – das Unterformular zeigt die gleichen Datensätze wie zuvor an.

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