Im dritten Teil der Artikelreihe zum Thema “Handyverwaltung” setzten wir die Arbeit an den Formularen der Lösung fort. In diesem Fall wollen wir die Provider verwalten. Um innerhalb der Lösung nicht immer die gleichen Techniken zu präsentieren, nutzen wir diesmal ein Listenfeld zur Auswahl der unterschiedlichen Datensätze, das sich allerdings im gleichen Formular wie die Darstellung des aktuell ausgewählten Providers befindet.
Beispieldatenbank
Die Beispiele dieses Artikels finden Sie in der Datenbank 1705_Handyverwaltung.accdb.
Vorbereitungen
Im Gegensatz zum vorherigen Teil der Artikelreihe, in dem wir beschrieben haben, wir wir die Personen der Handyverwaltung in entsprechenden Formularen darstellen, gibt es zwei wichtige Unterschiede: Erstens kümmern wir uns hier lediglich nur um eine einzige Tabelle ohne weitere Lookup-Felder, nämlich um tblProvider. Zweitens wollen wir die Daten der Tabelle nicht in zwei Formularen darstellen, wie es bei den Personen der Fall war: Dort haben wir nämlich ein übersichtsformular genutzt, das ein Unterformular mit allen Datensätzen der Tabelle tblPersonen enthielt sowie ein Detailformular, dass nach der Auswahl eines der Datensätze geöffnet wurde und dann diesen Datensatz anzeigte. Nein, wir wollen diesmal nur ein einziges Formular nutzen: Dieses soll im oberen Bereich ein Listenfeld mit allen Einträgen der Tabelle tblProvider anzeigen. Das gleiche Formular soll an die Tabelle tblProvider gebunden sein und die Daten aus den Feldern der Tabelle in daran gebundenen Steuerelementen anzeigen.
Tabelle tblProvider vorbereiten
Wir wollen die Nutzung der Felder der Tabelle tblProvider in den Tabellen und Steuerelementen möglichst einfach gestalten. Deshalb schauen wir uns zuvor an, wo die Feldnamen nicht mit den Bezeichnungen übereinstimmen, die wir in den Abfragen, Formularen, Berichten und Steuerelementen als Bezeichnungsfelder nutzen wollen und passen diese über die Feldeigenschaft Beschriftung entsprechend an. In dieser Tabelle passen die Feldbeschriftungen Bezeichnung, Webadresse, Hotline und Rechnungsinformationen bereits, sodass wir nur für das Primärschlüsselfeld ProviderID die Feldeigenschaft Beschriftung in den Wert Provider-ID ändern müssen (siehe Bild 1).
Bild 1: Anpassen der Beschriftung des Feldes Provider-ID für das Bezeichnungsfelder
Formular erstellen
Das Formular soll tblProvider heißen. Im Gegensatz zum vorherigen Teil der Artikelreihe, wo wir die beiden Formulare frmPersonenuebersicht und frmPersonendetails verwendet haben, zeigen wir ja hier die übersicht und die Details in einem Formular an. Also brauchen wir auch keine Erweiterung mehr wir …uebersicht oder …details, sondern können das Formular schlicht nach dem bennen, was es auch anzeigt – nämlich Provider.
Datenherkunft zuweisen
Das Formular frmProvider soll die Daten der Tabelle tblProvider anzeigen, allerdings nicht unbedingt in der dort per Primärschlüssel vorgegebenen Reihenfolge, sondern alphabetisch nach der Bezeichnung des Providers sortiert. Dazu erstellen Sie mit dem Ribbon-Befehl eine neue Abfrage namens qryProviderNachBezeichnung, der Sie alle Felder der Tabelle hinzufügen und außerdem für das Feld Bezeichnung in der Zeile Sortierung den Wert Aufsteigend auswählen (siehe Bild 2).
Bild 2: Abfrage, welche die Provider nach der Bezeichnung sortier
Diese Abfrage weisen Sie dem Formular nun für die Eigenschaft Datenherkunft zu. Danach wechseln Sie über den Ribbon-Eintrag Entwurf|Tools|Vorhandene Felder hinzufügen zur Feldliste und ziehen von dort aus alle Einträge direkt in den Detailbereich des Formularentwurfs (siehe Bild 3).
Bild 3: Hinzufügen der gebundenen Felder zum Formular frmProvider
Wir wollen jeweils nur einen Datensatz in diesem Formular anzeigen und nur über das Listenfeld einen anderen Datensatz auswählen können, dessen Details in den gebundenen Steuerelementen des Formulars angezeigt werden. Also benötigen wir standardmäßig im Formular aktivierten Elemente wie Navigationsschaltflächen, Datensatzmarkierer, Trennlinien und Bildlaufleisten nicht und können diese durch Einstellen der gleichnamigen Eigenschaften auf den Wert Nein deaktivieren. Wenn das Formular geöffnet wird, soll es jedoch in der Mitte des Access-Fensters erscheinen, weshalb wir die Eigenschaft Automatisch zentrieren auf den Wert Ja einstellen.
Listenfeld als übersicht hinzufügen
Nun fehlt noch das Listenfeld, welches die übersicht der Einträge anzeigt und die Auswahl eines der Einträge zur Anzeige der Details im Formular erlaubt. Dazu verschieben Sie zunächst die gebundenen Felder um einige Zentimeter nach unten, sodass Sie das Listenfeld darüber platzieren können. Dazu markieren Sie einfach alle Elemente mit der Tastenkombination Strg + A und verschieben diese dann beispielsweise mit der Nach unten-Taste nach unten.
Haben Sie genügend Platz geschaffen, fügen Sie über das Ribbon ein neues Listenfeld zum Formular hinzu. Dies sieht dann beispielsweise wie in Bild 4 aus. Hier haben wir das Listenfeld noch etwas angepasst. Dazu haben wir es zunächst unterhalb des dazugehörigen Bezeichnungsfeldes positioniert. Dazu markieren Sie das Listenfeld und ziehen es an dem viereckigen Kästchen oben links an die gewünschte Stelle. Legen Sie nun auch gleich den Namen des Listenfeldes fest, und zwar mit dem Wert lstProviderauswahl für die Eigenschaft Name.
Bild 4: Hinzufügen des Listenfeldes zur Auswahl des anzuzeigenden Providers
Zuweisen einer Datensatzherkunft zum Listenfeld
Das Listenfeld zeigt bisher noch keine Daten an, was wir ändern, indem wir die Eigenschaft Datensatzherkunft auf den Namen der bereits für das Formular als Datenherkunft verwendeten Abfrage qryProviderNachBezeichnung einstellen. Nun müssen wir uns überlegen, welche Felder der Datensatzherkunft das Listenfeld anzeigen soll. Grundsätzlich reicht es aus, wenn es nur den Namen des Providers anzeigt – die Webadresse, die Hotline und die Rechnungsinformationen benötigen wir ja nie alle gleichzeitig.
Die Datensatzherkunft liefert aber nun gleich alle fünf Felder der Tabelle. Damit das Listenfeld nur das Feld Bezeichnung anzeigt und das Feld ProviderID als gebundene Spalte verwendet, sind Einstellungen in zwei Eigenschaften nötig. Der Wert 2 für die Eigenschaft Spaltenanzahl des Listenfeldes sorgt dafür, dass diese nur die ersten beiden Felder der Datensatzherkunft, also der Abfrage qryProviderNachBezeichnung anzeigt. Aber wir wollen doch nur ein Feld anzeigen Ja, allerdings ist standardmäßig das erste Feld der Datensatzherkunft als das Feld für die gebundene Spalte festgelegt (Eigenschaft Gebundene Spalte mit dem Wert 1) und zweitens stellen wir im zweiten Schritt ja noch die Spaltenbreiten für die Anzeige der beiden Spalten ein.
Die dazu verwendete Eigenschaft heißt Spaltenbreiten und erhält den Wert 0. Aber warum 0, wir wollen doch die Breite für zwei Spalten einstellen – und welche Einheit wird denn dann überhaupt verwendet Ganz einfach: Die Einheit ergänzt Access automatisch mit cm, also Zentimeter, und wenn wir nur die Breite für die erste Spalte angeben, hier also 0cm, dann nimmt die zweite Spalte einfach den verbleibenden Platz im Listenfeld ein. Das Ergebnis sieht dann wie in Bild 5 aus. Das Listenfeld enthält in der ersten Spalte, welche mit der Breite 0cm angezeigt wird, den Primärschlüsselwert der Tabelle tblProvider. Damit kann dann leicht der aktuell ausgewählte Wert ermittelt werden.
Bild 5: Das Listenfeld zeigt nur den Wert des Feldes Bezeichnung der zugrunde liegenden Datensatzherkunft an.
Listenfeld zur Auswahl nutzen
Nun wollen wir dafür sorgen, dass die Auswahl eines der Einträge im Listenfeld auch den gewünschten Datensatz im Formular anzeigt. Dazu fügen Sie dem Listenfeld eine Ereignisprozedur hinzu, die durch das Ereignis Nach Aktualisierung ausgelöst wird. Dazu tragen Sie für die Eigenschaft Nach Aktualisierung den Wert [Ereignisprozedur] ein und klicken auf die Schaltfläche mit den drei Punkten. Die nun im VBA-Editor erscheinende leere Ereignisprozedur füllen Sie wie folgt:
Private Sub lstProviderauswahl_AfterUpdate() Dim lngProviderID As Long Dim strSQL As String lngProviderID = Me!lstProviderauswahl strSQL = "ProviderID = " & lngProviderID Me.Filter = strSQL Me.FilterOn = True End Sub
Die erste Anweisung nach den beiden Deklarationszeilen füllt den aktuellen Wert des Listenfeldes in die Variable lngProviderID ein. Die zweite setzt eine SQL-Filterbedingung zusammen und speichert diese in der Variablen strSQL. Der Wert könnte etwa so aussehen:
ProviderID = 1
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: