m:n-Beziehung per ListView-Checkbox pflegen

Das Festlegen von Daten für einfache m:n-Beziehungen, die nur die reine Verknüpfung zwischen zwei Tabellen herstellen, ohne weitere Daten zu liefern, gelingt auf verschiedene Arten. In diesem Beitrag stellen wir eine Möglichkeit über das ListView-Steuerelement und hier speziell über die Kontrollkästchen der einzelnen Einträge vor.

Die Verwaltung von Daten in m:n-Beziehungen haben wir in Access im Unternehmen schon auf verschiedenste Arten durchgeführt – sogar mit Kontrollkästchen (siehe m:n-Beziehung per Kontrollkästchen verwalten, www.access-im-unternehmen.de/723). Die dortige Lösung hatte jedoch den Nachteil, dass diese allzusehr nach Datenblatt aussah (s. Bild 1). Das bekommen wir noch ein wenig professioneller hin!

pic002.png

Bild 1: Eine bekannte Lösung …

Die Lösung dieses Beitrags sieht im fertigen Zustand wie in Bild 2 aus. Das Formular heißt frmFahrzeugeAusstattungsmerkmale und ist an die Tabelle tblFahrzeuge gebunden.

pic001.png

Bild 2: … und die Variante dieses Beitrags

Datenmodell

Die im ListView angezeigten Datensätze stammen aus der Tabelle tblAusstattungsmerkmale. Für die Beziehung zwischen Fahrzeugen und Ausstattungsmerkmalen und somit auch für die Haken in den Kontrollkästchen ist die Tabelle tblFahrzeugeAusstattungsmerkmale verantwortlich. Diese Tabelle enthält ein Primärschlüsselfeld sowie zwei Fremdschlüsselfelder zu den Feldern FahrzeugID und AusstattungsmerkmalID der beiden zu verknüpfenden Tabellen. Für diese beiden Felder legen Sie einen zusammengesetzten eindeutigen Schlüssel zusammen, damit jede Kombination aus Fahrzeug und Ausstattungsmerkmal nur einmal vorkommen kann (s. Bild 4 aus.

pic004.png

Bild 3: Dieser Index sorgt für eindeutige Kombinationen aus Fahrzeugen und Ausstattungsmerkmalen

pic003.png

Bild 4: Das Datenmodell der Beispieldatenbank

Die Tabelle tblFahrzeugeAusstattungsmerkmale enthält nur Daten, wenn ein Fahrzeug ein Ausstattungsmerkmal besitzt. Zum Hinzufügen eines Ausstattungsmerkmals erstellt man einen Datensatz in dieser Tabelle, der auf die entsprechende Kombination aus Fahrzeug und Ausstattungsmerkmal verweist. Soll ein Ausstattungsmerkmal entfernt werden, löscht man analog den betroffenen Eintrag.

Aufbau des Formulars

Das Formular enthält die zwei Felder der Tabelle tblFahrzeuge sowie das ListView-Steuerelement lstListView (s. Bild 5). Das Füllen des ListView-Steuerelements mit den Daten erfolgt in zwei Schritten:

pic005.png

Bild 5: Das Formular in der Entwurfsansicht

  • Im ersten Schritt werden alle Einträge der Tabelle tblAusstattungsmerkmale hinzugefügt. Dabei wird für jeden Eintrag ein ListView-Element angelegt.
  • Im zweiten Schritt werden die Kontrollkästchen der ListView-Elemente in Abhängigkeit vom aktuellen Fahrzeug und von den Ausstattungsmerkmalen aktiviert.

Das ListView-Steuerelement soll auf das Anklicken des Kontrollkästchens reagieren und eine Ereignisprozedur auslösen, welche die Daten der Tabelle tblFahrzeugeAusstattungsmerkmale aktualisiert. Damit dies geschehen kann, benötigen wir eine mit dem Schlüsselwort WithEvent deklarierte Variable, die auf das ListView-Steuerelement verweist. Die Deklaration nehmen Sie im Kopf des Klassenmoduls des Formulars vor (sollte dies noch nicht vorhanden sein, stellen Sie die Formulareigenschaft Hat Modul auf den Wert Ja ein):

Dim WithEvents objListView As MSComctlLib.ListView

Beim Laden des Formulars stellt die Ereignisprozedur aus Listing 1 einige Eigenschaften des ListView-Steuerelements ein. Besonders wichtig ist hier der Wert True für die Eigenschaft Checkboxes. Danach ruft sie die Prozedur ListViewFuellen auf, die für das Eintragen aller Ausstattungsmerkmale verantwortlich ist.

Listing 1: Initialisieren des ListView-Steuerelements beim Laden des Formulars

Private Sub Form_Load()
    Set objListView = Me!ctlListView.Object
    With objListView
        .Checkboxes = True
        .Appearance = ccFlat
        .BorderStyle = ccNone
        .View = lvwList
        .Arrange = lvwAutoTop
        .LabelWrap = False
        .ListItems.Clear
    End With
    ListViewFuellen
End Sub

Füllen des ListView-Steuerelements

Das reine Füllen des ListView-Steuerelements mit den Ausstattungsmerkmalen übernimmt die Prozedur ListViewFuellen (s. Bild 6).

Listing 2: Füllen des ListView-Steuerelements mit den Ausstattungsmerkmalen

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

den kompletten Artikel im PDF-Format mit Beispieldatenbank

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar