Aufgabenstellung:
Zuordnung von Gruppen (Geschäftlich, Freunde, Familie
usw...) an Kontaktdaten
Dies wir üblicherweise in MS Access über Haupt- und
Unterformular umgesetzt.
Geht es allerdings darum, nur Datensätze ohne weitere
Angaben einen Hauptdatensatz zu zuordnen, dann sind Unterformulare nicht
wirklich optimal.
Daher stelle ich in diesen Blog-Eintrag eine Lösung mit dynamischen Kontrollkästchen vor.
Klassisch Lösung mit
Unterformular:
|
|
Alternative Lösung
mit dynamischen Kontrollkästchen:
|
|
Das Formular mit Beispiel kann unter folgenden Link heruntergeladen werden:
Voraussetzung:
MS Access 2010, 2007, 2003, 2002, 2000
Es werden 2 Stammdaten Tabellen und eine Zuordnungstabelle benötigt.
Die Stammdaten Tabellen benötigen ein Feld mit eindeutigen
Daten (z.B. Primarykey auf ein Feld).
Einer der zwei Stammdaten Tabellen wird in ein Formular in
der Formularansicht dargestellt. Zusätzliche Verweise in VBA werden nicht
benötigt.
Implementierung:
1. Das
Formular frmACB im aktuellen Projekt importieren
2. Dieses
Formular als Unterformular in das Hauptformular einfügen
3. Im Hauptformular beim Laden (Form_Load) folgenden Code hinterlegen:
Option Explicit
DIM frmAktion As Form_frmACB
Private
Sub Form_Load()
Set frmAktion = Me.frmZuordnungAktion.Form
With frmAktion
.eLinkMasterFeld = Me.ID 'Erforderlich.
.eZuordnungstabelle = "tblZuordnungKontaktAktion" 'Erforderlich.
.eZuordnungsFeld1 = "KontaktID" 'Erforderlich.
.eZuordnungsFeld2 = "AktionID" 'Erforderlich.
.eStammtabelle = "tblAktion" 'Erforderlich.
.eStammFeldID = "ID" 'Erforderlich.
.eStammFeldBezeichnung = "Bezeichnung" 'Erforderlich.
.eSpaltenBeschriftung = "Aktionen" 'Optional.
.eStammFormName = "frmAktion" 'Optional.
.eStammFormSchaltflächenbeschriftung = "Aktionen verwalten..." 'Optional.
.eAuswahlAlleEinblenden = True 'Optional.
.eSortierung = NachBezeichnung 'Optional.
.eSortierrichtung = Aufsteigend 'Optional.
End With
End Sub
With frmAktion
.eLinkMasterFeld = Me.ID 'Erforderlich.
.eZuordnungstabelle = "tblZuordnungKontaktAktion" 'Erforderlich.
.eZuordnungsFeld1 = "KontaktID" 'Erforderlich.
.eZuordnungsFeld2 = "AktionID" 'Erforderlich.
.eStammtabelle = "tblAktion" 'Erforderlich.
.eStammFeldID = "ID" 'Erforderlich.
.eStammFeldBezeichnung = "Bezeichnung" 'Erforderlich.
.eSpaltenBeschriftung = "Aktionen" 'Optional.
.eStammFormName = "frmAktion" 'Optional.
.eStammFormSchaltflächenbeschriftung = "Aktionen verwalten..." 'Optional.
.eAuswahlAlleEinblenden = True 'Optional.
.eSortierung = NachBezeichnung 'Optional.
.eSortierrichtung = Aufsteigend 'Optional.
End With
End Sub
Hintergrund der
Technik:
Das Formular frmACB ist ein Endlosformular und wird als
Unterformular in einem Hauptformular eingefügt. Es kann beliebig oft in einem
Hauptformular eingefügt werden. Denn welche Datensätze abgebildet werden soll
ist nicht in dem Unterformular hinterlegt, sondern wird über das Hauptformular
einmalig definiert (Siehe Code oberhalb)
Nach jedem Datensatzwechsel im Hauptformular, wird die entsprechende Datenherkunft im Unterformular frmACB gesetzt.
Die Prozedur RequeryRecords
erzeugt eine sql-Abfrage die alle Datensätze der Stammdatentabelle (tblAktion) anzeigt.
Über einen LEFT
JOIN wird festgestellt, ob der Datensatz einen zugeordneten Datensatz in
der Zuordnungstabelle (tblZuordnungKontaktAktion)
hat. Dies muss allerdings nur für den Datensatz geschehen, der im Hauptformular
gerade vorhanden ist. Dies wird über eine integrierte Unterabfrage realisiert. Das
Feld SELECTED
enthält also den Wert True,
wenn eine Zuordnung vorhanden ist, ansonsten False.
Die Änderung der Zuordnung kann allerdings nicht über das
Kontrollkästchen SELECTED
erfolgen, da dies ja ein berechneter Ausdruck ist, also nur zur Anzeige dient.
Hier wird ein kleiner optischer Trick verwendet, über das Kontrollkästchen wird
ein ungebundenes Kontrollkästchen chkChanger gelegt, welches die Änderungen erfasst.
Die Prozedur SetAssignment
führt die Änderung tatsächlich durch.
In der Beispiel-Datei sind die Eigenschaften im Code genauer beschrieben.
Hinweis: Dies ist die neue Version 1.5 mit Ereignis-Übergabe mit folgenden Vorteilen:
In der Beispiel-Datei sind die Eigenschaften im Code genauer beschrieben.
Hinweis: Dies ist die neue Version 1.5 mit Ereignis-Übergabe mit folgenden Vorteilen:
- Die Eigenschaften eZuordnungstabelle und eStammtabelle können jetzt alternativ mit einen SQL-Code befüllt werden, anstatt mit einen Tabellen-/Abfragename
- Noch einfachere Implementierung (nur eine Prozedur)
- Das Formular frmACB liefert Events auf die im Hauptformular reagiert werden kann
Keine Kommentare:
Kommentar veröffentlichen