Home > Artikel > Ausgabe 1/2018 > Handyverwaltung: Personen, Verträge, Handys

Handyverwaltung: Personen, Verträge, Handys

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).

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.

Die an der Zuordnung von Handys und Verträgen zu den Personen beteiligten Tabellen

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).

Abfrage als Datenherkunft des Unterformulars sfmPersonenMobilfunkgeraete

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.

Das Unterformular sfmPersonenMobilfunkgeraete

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.

Einbau des Unterformulars in das Hauptformular

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).

Das Formular frmPersonendetails mit den zugeordneten Mobilfunkgeräten

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.

Mobilfunkgerät von einem zum anderen Benutzer

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

Findet die Prozedur einen solchen Eintrag, landet dieser in der Variablen lngPersonID, welche sonst den beim Initialisieren der Variablen vergebenen Wert 0 behält. Die folgende If...Then-Bedingung prüft, ob lngPersonID einen anderen Wert als 0 aufweist. Falls ja, ermittelt sie mit einer weiteren DLookup-Funktion den vollen Namen dieser Person.

Im ersten Parameter der DLookup-Funktion geben wir daher ausnahmsweise mal nicht nur den Namen eines einzigen Feldes an, sondern stellen einen Ausdruck aus zwei Feldnamen, getrennt durch ein Leerzeichen, zusammen:

"Vorname & ' ' & Nachname"

Danach erscheint eine Meldungsbox, welche den Benutzer darauf hinweist, dass das Mobilfunkgerät aktuell mit dem ermittelten Benutzer verknüpft ist und ihn fragt, ob es an den neuen Benutzer übertragen werden soll. Klickt der Benutzer hier auf die Schaltfläche Ja, stellt die Prozedur eine SQL-Anweisung zusammen, welche den Wert des Feldes Enddatum für alle Datensätze der Tabelle tblPersonenMobilfunkgeraete, deren Feld Enddatum noch leer ist und deren Feld PersonID mit dem Wert aus der Variablen lngPersonID übereinstimmt, auf das aktuelle Datum einstellt.

Wenn wir danach einen Blick in die Tabelle tblPersonenMobilfunkgeraete werfen, erhalten wir die beiden Datensätze aus Bild 7.

Mobilfunkgerät, das von einer Person zur nächsten gewandert ist

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!