Handyverwaltung IV: Verträge und SIM-Karten

Im vierten Teil der Artikelreihe zum Thema “Handyverwaltung” setzen wir die Arbeit an den Formularen der Lösung fort. Diesmal fügen wir die Formulare zum Verwalten gleich zweier Objekttypen hinzu: für die Verträge und die SIM-Karten. Die Verträge und die SIM-Karten stehen in einem 1:n-Verhältnis, wobei wir jedem Vertrag mehrere SIM-Karten zuordnen können wollen. Sehen Sie selbst, wie dies umgesetzt wird!

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1705_Handyverwaltung.accdb.

Vorüberlegungen

In diesem Teil der Artikelreihe bilden wir die Formulare für den Ausschnitt des Datenmodells ab, den Sie in Bild 1 erkennen können. Die Tabelle tblProvider haben wir ja bereits im Artikel Handyverwaltung III: Provider verwalten über ein Formular für den Benutzer verfügbar gemacht. Hinzu kommen nun die beiden Tabellen tblVertraege und tblSIMKarten. Für jeden Vertrag wollen wir dabei zunächst einen Provider auswählen lassen, und zwar über ein Kombinationsfeld.

Teil des Datenmodells, den dieser Teil der Artikelreihe abdeckt

Bild 1: Teil des Datenmodells, den dieser Teil der Artikelreihe abdeckt

Die Vorbereitungen dazu haben wir ja bereits getroffen, indem wir im Entwurf der Tabelle tblVertraege ein entsprechendes Nachschlagefeld angelegt haben. Als weiteres Datum für die Verträge wollen wir die Vertragsnummer speichern. Später kümmern wir uns um weitere interessante Eigenschaften eines Vertrags, nämlich zum Beispiel die Laufzeit, das Vertragsdatum, die einmalig und monatlich anfallenden Kosten und so weiter.

Die Tabelle tblSIMKarten enthält die Daten für die jeweilige SIM-Karte wie die Kartennummer, die Telefonnummer, die PINs und PUKs sowie den Vertrag, dem die Karte zugeordnet ist. Auch hier verwenden wir wieder ein Fremdschlüsselfeld als Basis für das Kombinationsfeld, mit dem der Benutzer den zugehörigen Vertrag auswählen kann.

In diesem Fall wollen wir allerdings nicht nur in dem Formular, das die Details einer SIM-Karte anzeigt, die verknüpften Verträge anzeigen (es kann ja für Verträge auch einmal mehr als eine SIM-Karte geben – zum Beispiel für ein zweites Gerät wie ein Tablet). Wir wollen auch im Formular für die Vertragsdetails alle mit dem Vertrag verknüpften SIM-Karten anzeigen, und zwar in einem Unterformular.

Das Formular frmSIMKarten

Beginnen wir also mit dem einfacher zu entwerfenden Formular, nämlich dem für die SIM-Karten. Dieses soll die Tabelle tblSIMKarten als Datenherkunft verwenden. Wollen wir zur Verwaltung der SIM-Karten wieder zwei Formular erstellen, also ein übersichtsformular und ein Detailformular wie bei den Personen, oder fassen wir die übersicht und die Details in einem Formular zusammen wie bei den Providern Wir entscheiden uns für die letztere Variante. Allerdings soll diesmal kein Listenfeld, sondern ein Unterformular mit allen Datensätzen der Tabelle tblSIMKarten zum Einsatz kommen. Wir wollen mit der Lösung ja auch einmal verschiedene Ansätze zur Darstellung der auf unterschiedliche Art verknüpften Daten liefern. Also legen wir zunächst eine Abfragenamens qrySIMKartenNachKartennummer an, welche die alle Felder der Tabelle tblSIMKarten liefert und die Einträge nach dem Feld SIMKarte sortiert (siehe Bild 2).

Abfrage, welche die Felder der Tabelle tblSIMKarten nach Kartennummer sortiert liefert

Bild 2: Abfrage, welche die Felder der Tabelle tblSIMKarten nach Kartennummer sortiert liefert

Diese Abfrage wählen Sie dann für das neu erstellte Formular sfmSIMKarten für die Eigenschaft Datenherkunft ein. Wechseln Sie dann zur Anzeige der Feldliste und ziehen Sie die drei Felder SIMKarteID, SIMKarte und Telefonnummer dieser Abfrage in den Detailbereich des Formularentwurfs (siehe Bild 3). Anschließend stellen Sie die Eigenschaft Standardansicht auf Datenblatt ein. Schließen Sie das Formular nun.

Unterformular für die Anzeige aller SIM-Karten

Bild 3: Unterformular für die Anzeige aller SIM-Karten

Das Hauptformular frmSIMKarten

Nun folgt das Hauptformular, dem Sie auch die Abfrage qrySIMKartenNachKartennummer zuweisen. Auch wenn dieses Formular immer nur einen Datensatz anzeigt, verwenden wir diese sortierte Variante der Abfrage – warum, werden Sie weiter unten sehen. Und welcher beim öffnen des Formulars angezeigt wird, legen wir später fest.

Erstellen Sie also ein neues Hauptformular namens frmSIMKarten. Stellen Sie als Datenherkunft die Abfrage qrySIMKartenNachKartennummer ein. Da wir immer nur einen Datensatz anzeigen und die Navigation über die im Unterformular angezeigten Datensätze erfolgen soll, wollen wir hier die Eigenschaften Datensatzmarkierer, Navigationsschaltflächen, Trennlinien und Bildlaufleisten auf Nein einstellen sowie die Eigenschaft Automatisch zentrieren auf den Wert Ja.

Ziehen Sie dann als Erstes das Unterformular sfmSIMKarten aus dem Navigationsbereich in den Entwurf des Hauptformulars frmSIMKarten. Positionieren Sie es am linken Rand, sodass sie die übrigen Steuer-elemente, welche die Details zum aktuell im Unterformular ausgewählten Datensatz anzeigen sollen, rechts noch ausreichend Platz haben.

Nun blenden Sie die Feldliste ein und ziehen alle Felder der Datenherkunft so in das Formular, dass diese rechts vom Unterformular angezeigt werden. Das Ergebnis soll dann etwa wie in Bild 4 aussehen.

Hauptformular mit Unterformular

Bild 4: Hauptformular mit Unterformular

Wenn Sie nun in die Formularansicht wechseln, erhalten Sie die Ansicht aus Bild 5. Hier ist noch nicht alles Gold, was glänzt – selbst mit fehlenden Daten noch nicht. Zunächst einmal scheint die Anzeige des Feldes SIMKarteID im Unterformular in der Datenblattansicht nicht unbedingt nötig zu sein. Wenn diese wegfällt, haben die übrigen beiden Felder vermutlich auch schon genug Platz. Aber können wir dieses Feld einfach entfernen Im Artikel Handyverwaltung III: Provider verwalten, wo wir ein Listenfeld zur Anzeige aller Provider verwendet haben, musste die ProviderID ja explizit aufgeführt werden, damit wir diese als gebundene Spalte nutzen und ihren Wert ermitteln konnten. Also sollen wir das Feld SIMKarteID nun aus dem Entwurf des Unterformulars entfernen oder können wir dieses irgendwie ausblenden

Formularansicht ohne Daten

Bild 5: Formularansicht ohne Daten

Ein Einstellen der Eigenschaft Sichtbar für das Textfeld auf den Wert Nein hilft jedenfalls in der Datenblattansicht nichts: Die Spalte wird nach wie vor angezeigt. Um zu prüfen, was geschieht, wenn wir das Feld entfernen, müssen wir zunächst die synchrone Darstellung der Daten im Haupt- und Unterformular realisieren.

Haupt- und Unterformular synchronisieren

Um dafür zu sorgen, dass das Hauptformular immer den aktuell im Unterformular markierten Datensatz anzeigt, haben wir mehrere Möglichkeiten. Man mag vermuten, dass hier der Effekt eintritt, der auch beim Erstellen von Haupt- und Unterformular für die Darstellung von Daten aus 1:n-Beziehungen eintritt: Hier wird ja das Unterformular-Steuerelement, dass dann schon an die entsprechende Datenherkunft gebunden sein sollte, in das Hauptformular gezogen. Wenn diese an eine Datenherkunft gebunden ist, für das Access eine Beziehung erkennen kann, werden die beiden Eigenschaften Verknüpfen von und Verknüpfen nach des Unterformular-Steuerelements automatisch mit dem Primärschlüsselfeld und dem Fremdschlüsselfeld der Beziehung gefüllt.

Wechseln wir einmal in die Entwurfsansicht und markieren das Unterformular-Steuerelement wie in Bild 6, erkennen wir, dass Access hier automatisch für beide Eigenschaften den Wert SIMKarteID eingetragen hat.

Verknüpfungseigenschaften des Unterformular-Steuerelements

Bild 6: Verknüpfungseigenschaften des Unterformular-Steuerelements

Das bedeutet, dass das Formular im Unterformular nur diejenigen Datensätze anzeigt, deren Wert im Feld SIMKarteID mit dem entsprechenden Wert im übergeordneten Formular übereinstimmt. Was wiederum heißt, dass das Unterformular immer nur den Datensatz anzeigt, der momentan im Hauptformular angezeigt wird (siehe Bild 7). So soll es natürlich nicht aussehen, also leeren wir in einem ersten Schritt die beiden Eigenschaften Verknüpfen von und Verknüpfen nach des Unterformular-Steuerelements. Wichtig ist dabei, dass Sie tatsächlich das Unterformular-Steuerelement markieren und nicht das Unterformular selbst. Das erreichen Sie beispielsweise, indem Sie oben links im Access-Fenster den Namen des Unterformular-Steuerelements, hier sfmSIMKarten, auswählen und so das Unterformular-Steuerelement markieren (siehe Bild 8).

Das Unterformular zeigt nur den aktuellen Datensatz des Hauptformulars an.

Bild 7: Das Unterformular zeigt nur den aktuellen Datensatz des Hauptformulars an.

Auswählen des Unterformular-Steuerelements

Bild 8: Auswählen des Unterformular-Steuerelements

Wenn Sie nach dem Leeren der beiden Eigenschaften Verknüpfen von und Verknüpfen nach wieder zur Formularansicht wechseln, zeigt dieses nun alle Datensätze im Unterformular an. Wenn Sie einen davon auswählen, liefert das allerdings nicht die Details des Datensatzes im Hauptformular. Kein Wunder: Es gibt ja auch nun keinerlei Beziehung mehr zwischen den Daten im Haupt- und im Unterformular. Also sorgen wir zunächst dafür, dass das Hauptformular die Daten des im Unterformular ausgewählten Datensatzes anzeigt.

Dazu ist nur eine einzige Anweisung nötig. Diese fügen Sie in einer Ereignisprozedur ein, die durch das Ereignis Beim Laden des Hauptformulars ausgelöst wird. Geben Sie dazu für die Eigenschaft Beim Laden des Hauptformulars den Wert [Ereignisprozedur] ein und klicken Sie auf die Schaltfläche mit den drei Punkten. Die nun erscheinende Ereignisprozedur füllen Sie wie folgt auf:

Private Sub Form_Load()
    Set Me!sfmSIMKarten.Form.Recordset                                 = Me.Recordset
End Sub

Der nächste Wechsel zur Formularansicht zeigt, dass wir unser Ziel erreicht haben (siehe Bild 9). Was geschieht hier Wir haben die Eigenschaft Recordset des Unterformulars im Unterformularsteuerelement sfmSIMKarten auf das Recordset-Element des Hauptformulars eingestellt. Auf diese Weise zeigen das Haupt- und das Unterformular nun immer den gleichen Datensatz an, egal, ob Sie diesen im Haupt- oder im Unterformular wechseln.

Das Hauptformular zeigt nun die Daten des im Unterformular ausgewählten Datensatzes an.

Bild 9: Das Hauptformular zeigt nun die Daten des im Unterformular ausgewählten Datensatzes an.

Unterformular aus der Reihenfolge entfernen

Das können Sie vom Unterformular aus testen, indem Sie dort durch die Datensätze navigieren und betrachten, wie da Hauptformular jeweils die passenden Detaildaten anzeigt. Andersherum ist es nicht so einfach zu testen, da wir bereits die Navigationsschaltflächen ausgeblendet haben.

So können wir nur noch mit der Tabulator-Taste durch die Steuer-elemente navigieren und würden so nach dem Verlassen des letzten Steuerelements zum nächsten Datensatz des Hauptformulars wechseln. Allerdings landen wir vor dem Verlassen des ersten Datensatzes im Unterformular-Steuer-element, weil dieses zuletzt zum Formular hinzugefügt wurde und somit in der Reihenfolge die letzte Position belegt. Das können wir ändern, indem wir das Unterformular-Steuerelement einfach aus der Reihenfolge herausnehmen. Dazu stellen Sie die Eigenschaft In Reihenfolge des Steuerelements auf den Wert Nein ein. Von nun an können Sie testweise durch die Steuer-elemente des Hauptformulars navigieren, bis Sie das letzte Steuer-element des aktuellen Datensatzes verlassen und im nächsten Schritt zum ersten Feld des nächsten Datensatzes wechseln. Dann zeigt auch das Unterformular den nächsten Datensatz an.

Da der Benutzer aber nicht mit den Tabulator-Tasten durch die Datensätze navigieren soll, sondern die Datensätze über die Auswahl im Unterformular ansteuern soll, legen wir noch für die Eigenschaft Zyklus den Wert Aktueller Datensatz fest. So kann der Benutzer mit den Tabulator-Tasten lediglich durch den aktuell angezeigten Datensatz navigieren.

Primärschlüsselfeld aus Unterformular ausblenden

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