Bevor wir die Anwendung zur Verwaltung von Handy, Verträgen, Personen und mehr mit einem Ribbon ausstatten können, müssen wir noch die Details einer Person um ein paar Dinge ergänzen. So zeigt unser Detailformular bisher nur die Personendaten an, aber nicht, welche Verträge und welche Handys beziehungsweise Mobilfunkgeräte dieser Person zugeordnet sind. Dies holen wir im vorliegenden Artikel nach – und ergänzen auch noch die Formulare zur Anzeige der Mobilfunkgeräte und Verträge um die Zuordnung zur jeweiligen Person.
Beispieldatenbank
Die Beispiele dieses Artikels finden Sie in der Datenbank 1801_Handyverwaltung.accdb.
Datenmodell
Das Datenmodell ist bereits für die Ergänzungen dieses Artikels vorbereitet. Die Personen können wir den Verträgen über die Tabelle tblPersonenVertraege zuordnen, die Personen den Mobilfunkgeräten über die Tabelle tblPersonenMobilfunkgeräte. Die beteiligten Tabellen finden Sie in der übersicht aus Bild 1.
Bild 1: Die an der Zuordnung von Handys und Verträgen zu den Personen beteiligten Tabellen
Warum benötigen wir m:n-Beziehungen und keine einfachen Lookupfelder in den Tabellen tblMobilfunkgeraete und tblVertraege Bei den Mobilfunkgeräten gehen wir davon aus, dass die Geräte durchaus “vererbt” werden können, beispielsweise von Familienmitglied zu Familienmitglied. Deshalb speichern wir mit Datum, wann welches Gerät von welcher Person genutzt wurde. Andersherum kann es auch sein, dass ein Familienmitglied gleich mehrere Geräte verwendet – beispielsweise ein Smartphone und ein Tablet oder zusätzlich noch eine Smartwatch. Bei den Verträgen wollen wir es ermöglichen, die Kosten aufzuteilen zwischen mehreren Personen – oder auch einer Person die Kosten von mehreren Verträgen aufzudrücken.
Zuordnung von Mobilfunkgeräten zu Personen
Um die Mobilfunkgeräte einer Person zuzuordnen, gibt es zwei Möglichkeiten: Wir führen im Formular frmPersonendetails in einem Unterformular eine Liste der Geräte dieser Person. Oder wir fügen zum Formular frmMobilfunkgeraetDetails entsprechende Steuer-elemente hinzu, um die Zuordnung zu einer Person festzulegen.
Wir beginnen mit dem Formular frmPersonendetails. Zunächst legen wir eine Abfrage an, die wir als Datenherkunft für das noch zu erstellende Unterformular sfmPersonenMobilfunkgeraete anlegen. Dieses enthält die Tabelle tblPersonenMobilfunkgeraete als Datenquelle und liefert alle Felder, wobei die Abfrage die Datensätze absteigend nach dem Feld Startdatum sortiert (siehe Bild 2).
Bild 2: Abfrage als Datenherkunft des Unterformulars sfmPersonenMobilfunkgeraete
Diese Abfrage weisen wir nach dem Speichern dem neuen Unterformular sfmPersonenMobilfunkgeraete als Datenherkunft zu.
Dem Detailbereich des Formularentwurfs weisen wir nun die drei Felder MobilfunkgeraetID, Startdatum und Enddatum zu (siehe Bild 3). Außerdem stellen wir für die Eigenschaft Standardansicht den Wert Datenblatt fest.
Bild 3: Das Unterformular sfmPersonenMobilfunkgeraete
Danach speichern und schließen wir das Unterformular sfmPersonenMobilfunkgeraete und öffnen das Formular frmPersonendetails in der Entwurfsansicht. Die OK-Schaltfläche ziehen wir ein wenig nach unten und fügen per Drag and Drop aus dem Navigationsbereich das Unterformular sfmPersonenMobilfunkgeraete zum Entwurf des Formulars hinzu.
Das Ergebnis sieht wie in Bild 4 aus. Das Eigenschaftsfenster sollte für das Unterformular-Steuerelement gleich den Wert PersonID in den beiden Eigenschaften Verknüpfen von und Verknüpfen nach eingetragen haben.
Bild 4: Einbau des Unterformulars in das Hauptformular
Dadurch werden gleich beim Wechsel in die Formularansicht automatisch nur die Einträge der Tabelle tblPersonenMobilfunkgeraete angezeigt, die auch der jeweiligen Person zugewiesen sind. Wenn Sie noch keine Werte von Hand in die Tabelle tblPersonenMobilfunkgeraete eingetragen haben, dürfte das Unterformular jedoch noch leer sein.
Wenn Sie allerdings schon ein paar Datensätze in die Tabelle tblMobilfunkgeraete eingegeben haben, lässt sich im Formular frmPersonendetails zumindest schon einmal ein Datensatz über das Kombinationsfeld auswählen (siehe Bild 5).
Bild 5: Das Formular frmPersonendetails mit den zugeordneten Mobilfunkgeräten
Die Auswahl können wir nun noch mit anderen Funktionen kombinieren. So könnten wir beispielsweise dafür sorgen, dass das Feld Startdatum, wenn es bei der Auswahl des Mobilfunkgeräts noch leer ist, mit dem aktuellen Datum gefüllt wird. Das erledigen wir, indem wir für das Ereignis Nach Aktualisierung des Kombinationsfeldes zur Auswahl des Mobilfunkgerätes eine entsprechende Ereignisprozedur hinterlegen. Dazu ändern wir zunächst den Namen des Kombinationsfeldes im Unterformular auf cboMobilfunk-geraetID (wir wollen zumindest alle Elemente, für die wir Ereignisprozeduren anlegen, mit einem Präfix versehen, welches den Steuerelementtyp erkennen lässt). Anschließend legen wir die folgende Ereignisprozedur an:
Private Sub cboMobilfunkgeraetID_AfterUpdate() If IsNull(Me!txtStartdatum) Then Me!txtStartdatum = Date End If End Sub
Die Prozedur prüft, ob das Feld zum Speichern des Startdatums, welches wir ebenfalls mit einem entsprechenden Präfix versehen, leer ist. Falls ja, trägt es das aktuelle Datum als Startdatum ein.
Mobilfunkgeräte übernehmen
Den Aufwand mit der Verknüpfungstabelle haben wir durchgeführt, damit wir es auch speichern können, wenn ein Gerät einen gewissen Zeitraum der einen Person zugeordnet ist und danach einer anderen Person zugeteilt wird. Diesen Vorgang müssen wir nun noch in unserer Lösung berücksichtigen.
Wenn beispielsweise der Person mit der ID 1 das Gerät namens Beispielgerät zugeordnet ist und wir dieses Gerät nun der Person mit der ID 2 zuordnen wollen (siehe Bild 6), müssen wir auch hier eingreigen: Sonst haben nämlich bald beide Personen das gleiche Gerät als aktives Gerät in ihrer Liste stehen. Was tun Wir müssen beim Auswählen des Gerätes auch noch prüfen, ob es bereits einer anderen Person zugeordnet ist. In diesem Falle benötigen wir weiteren Code, der nicht nur die Prüfung durchführt, sondern auch noch ein Meldungsfenster anzeigt, mit dem wir den Benutzer fragen, ob dieses Mobilfunkgerät den Besitzer wechseln soll. In diesem Fall nutzen wir dann nicht das Ereignis Nach Aktualisierung, sondern Vor Aktualisierung. Wenn sich der Benutzer nämlich entscheidet, das vergebene Gerät nicht einer anderen Person zuzuordnen, können wir dieser Ereignisprozedur über den Parameter Cancel nämlich mitteilen, dass die Auswahl des Eintrags über das Kombinationsfeld abgebrochen wird.
Bild 6: Mobilfunkgerät von einem zum anderen Benutzer
Die Prozedur aus Listing 1 erledigt genau dies: Sie versucht zunächst, den Primärschlüsselwert eines Datensatzes der Tabelle tblPersonenMobilfunkgeraete zu ermitteln, der bereits mit dem auszuwählenden Mobilfunkgerät verknüpft ist und bei dem das Feld Enddatum zusätzlich noch leer ist.
Private Sub cboMobilfunkgeraetID_BeforeUpdate(Cancel As Integer) Dim lngPersonID As Long Dim strPerson As String Dim db As DAO.Database Dim strSQL As String Dim intResult As VbMsgBoxResult lngPersonID = Nz(DLookup("PersonID", "tblPersonenMobilfunkgeraete", "MobilfunkgeraetID = " & Me!cboMobilfunkgeraetID _ & " AND Enddatum IS NULL"), 0) If Not lngPersonID = 0 Then strPerson = DLookup("Vorname & ' ' & Nachname", "tblPersonen", "PersonID = " & lngPersonID) intResult = MsgBox("Das Gerät ist aktuell der Person '" & strPerson & "' zugeordnet. übernehmen", vbYesNo) If intResult = vbYes Then Set db = CurrentDb strSQL = "UPDATE tblPersonenMobilfunkgeraete SET Enddatum = " & SQLDatum(Date) & " WHERE PersonID = " _ & lngPersonID & " AND Enddatum IS NULL" db.Execute strSQL Else Cancel = True End If End If End Sub
Listing 1: übernehmen eines Mobilfunkgerätes durch einen anderen Nutzer
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: