In den ersten Teilen der Artikelreihe haben wir das Datenmodell erstellt, die Tabellen mit den Daten aus der IMDB-Datenbank gefüllt und ein Detailformular für die Ansicht eines Films mit Genres, Darstellern und Crew erstellt. Um nun gezielt Film-Datensätze in dem Detailformular anzeigen zu können, benötigen wir ein Übersichtsformular, mit dem wir die Filme auswählen können. Außerdem wollen wir von diesem Übersichtsformular aus neue Filme anlegen und vorhandene Filme löschen können.
Beispieldatenbank
Die Beispiele dieses Artikels finden Sie in der Datenbank 2006_Filmdatenbank.accdb.
Übersichtsformular zum Anzeigen der Filmliste
Das Übersichtsformular soll auf jeden Fall eines liefern: Eine Liste der Filme. Hier stehen mehrere Steuerelemente zur Wahl, zum Beispiel ein Listenfeld oder ein Unterformular in der Datenblattansicht. Die Datenblatt-Variante ist sinnvoll, wenn Sie die angezeigten Daten auch bearbeiten wollen oder wenn Sie dem Benutzer darüber die Möglichkeit geben wollen, die Datensätze nach bestimmten Kriterien zu filtern oder zu sortieren. Ist das nicht nötig, reicht auch ein Listenfeld aus. Der Vorteil ist, dass die Daten hier standardmäßig nicht bearbeitet werden können. Außerdem können wir mit einem Listenfeld nicht nur einzelne, sondern auch mehrere Einträge gleichzeitig auswählen.
Formular erstellen
In unserem Fall wählen wir also die Listenfeld-Variante. Dazu erstellen wir als Erstes ein neues Formular namens frmFilmeUebersicht. Dieses soll nicht selbst an eine Datensatzquelle gebunden werden und benötigt somit auch keine Elemente wie den Datensatzmarkierer, die Navigationsschaltflächen oder die Bildlaufleiste.
Deshalb können wir die entsprechenden Eigenschaften des Formulars auf Nein einstellen. Damit das Formular aber beim Öffnen direkt zentriert angezeigt wird, legen wir den Wert der Eigenschaft Automatisch zentrieren auf Ja fest.
Listenfeld einfügen und füllen
Dann fügen Sie ein Listenfeld-Steuerelement hinzu. Bevor wir die Datensatzherkunft einstellen, legen wir fest, welche Daten das Listenfeld eigentlich anzeigen soll. Der Filmtitel allein ist manchmal nicht aussagekräftig genug, da es von vielen Filmen Remakes gibt, die genauso heißen wie das Original. Wir sollten also zumindest noch das Erscheinungsjahr zum Listenfeld hinzufügen Gegebenenfalls ist auch die Dauer noch interessant.
Damit haben wir die komfortable Situation, dass wir drei Felder anzeigen wollen, von denen nur eines Inhalt mit variabler Länge aufweist – ausgehend davon, dass Erscheinungsjahr und Dauer immer nur vier beziehungsweise maximal drei Ziffern enthalten.
Also fügen wir ein neues Listenfeld zum Formular hinzu, das wir lstFilme nennen. Bevor wir weitere Steuerelemente hinzufügen, soll das Listenfeld annähernd das komplette Formular füllen. Damit es sich beim Vergrößern des Formulars an dessen Größe anpasst, stellen wir die beiden Eigenschaften Horizontaler Anker und Vertikaler Anker auf Beide ein (siehe Bild 1).
Bild 1: Entwurf des Formulars zur Anzeige der Filmübersicht
Datenquelle zum Listenfeld hinzufügen
Danach kümmern wir uns um die anzuzeigenden Daten. Dazu aktivieren Sie die Eigenschaft Datensatzherkunft des Listenfeldes und klicken auf die Schaltfläche mit den drei Punkten (…).
Damit gelangen wir zum Abfrage-Generator für diese Eigenschaft. Hier ziehen wir die Tabelle tblFilme in den Abfrageentwurf. Wir benötigen die Felder FilmID, Titel, Erscheinungsjahr und Dauer, die wir in das Entwurfsraster ziehen. Für das Feld Titel legen wir eine aufsteigender Sortierung fest (siehe Bild 2).
Bild 2: Abfrage mit den Daten für die Filmübersicht
Bevor wir die Abfrage schließen, speichern wir diese unter einem eigenen Namen, und zwar qryFrmFilme-UebersichtLstFilme.
Nach dem Schließen der Abfrage stellen wir noch weitere Eigenschaften des Listenfeldes ein, damit die Daten der Abfrage wie gewünscht angezeigt werden.
Mit der Eigenschaft Spaltenanzahl, die wir auf den Wert 4 einstellen, legen wir die anzuzeigenden Spalten fest. Genau genommen wollen wir aber nur drei Spalten anzeigen – die erste mit der FilmID ist nur dafür gedacht, nach der Auswahl eines Films den entsprechenden Film im Formular frmFilmDetails anzeigen zu können.
Deshalb blenden wir mit der nächsten Eigenschaft Spaltenbreiten die erste Spalte gleich wieder aus. Die dritte Spalte soll drei Zentimeter breit sein und die vierte zwei Zentimeter. Die zweite Spalte soll den verbleibenden Platz einnehmen. Dazu verwenden wir den folgenden Wert für die Eigenschaft Spaltenbreiten:
0cm;;3cm;2cm
Außerdem wollen wir die Spaltenüberschriften einblenden, weshalb wir die gleichnamige Eigenschaft auf den Wert Ja einstellen. Das Ergebnis sieht damit wie in Bild 3 aus.
Bild 3: Erster Entwurf des Listenfeldes mit den Filmen
Wenn wir allerdings die Größe des Formulars anpassen, stellen wir fest, dass sich das Listenfeld nur in der Höhe der Größe des Formulars anpasst, aber nicht in der Breite.
Das Listenfeld wird zwar verbreitert, aber nicht die enthaltenen Spalten (siehe Bild 4). In diesem Fall ist das aber kein Problem, denn es gibt ein Ereignis, das beim Ändern der Größe des Formulars ausgelöst wird, und zwar Bei Größenänderung. Also hinterlegen wir für die Ereigniseigenschaft die folgende Ereignisprozedur:
Bild 4: Die Breite des Listenfeldes wird nicht angepasst.
Private Sub Form_Resize() Me!lstFilme.ColumnWidths = Me!lstFilme.ColumnWidths End Sub
Wir stellen hier die Eigenschaft Spaltenbreiten immer wieder auf den Wert der Eigenschaft selbst ein. Das führt zum gewünschten Ergebnis, denn in dem Wert 0cm;;3cm;2cm steckt für die zweite Spalte die Information, dass diese den verbleibenden Platz einnimmt – was hier jeweils beim Ändern der Formulargröße aktualisiert wird.
Den gewünschten Film per Doppelklick in der Detailansicht anzeigen
Bisher haben wir keine Steuerelemente außer dem Listenfeld im Formular. Also nutzen wir zunächst die Ereignisse des Listenfeldes, um den gewünschten Film im Formular frmFilmDetails anzuzeigen.
Hinterlegen Sie dazu für die Ereigniseigenschaft Beim Doppelklicken den Wert [Ereigniseigenschaft] und klicken Sie auf die Schaltfläche mit den drei Punkten, um die leere Ereignisprozedur für dieses Ereignis hinzuzufügen. Diese Prozedur prüft, ob aktuell ein Film im Listenfeld markiert ist, und öffnet dann mit der DoCmd.OpenForm-Methode das Formular frmFilmDetails. Dabei übergibt es mit dem Parameter WhereCondition den Ausdruck Film = 123, wobei 123 ein Beispiel für den Wert der ersten Spalte des Listenfeldes ist, also dem Wert des Feldes FilmID:
Private Sub lstFilme_DblClick(Cancel As Integer) If Not IsNull(Me!lstFilme) Then DoCmd.OpenForm "frmFilmDetails", _ WhereCondition:="FilmID = " & Me!lstFilme End If End Sub
Das Ergebnis sehen Sie in Bild 5. Wann immer der Benutzer nun doppelt auf das Listenfeld klickt, wird der angeklickte Film im Formular frmFilmDetails angezeigt.
Bild 5: Öffnen der Details eines Films per Doppelklick auf den jeweiligen Eintrag
Filmdetails per Schaltfläche einblenden
Ein Doppelklick zum Öffnen eines Elements ist für Access-Entwickler eine offensichtliche Möglichkeit, aber manche Nutzer mögen nicht auf diese Idee kommen.
Also fügen wir auch noch eine Schaltfläche hinzu, mit welcher der Benutzer den aktuell im Listenfeld markierten Film im Formular frmFilmDetails anzeigen kann. Die Schaltfläche platzieren wir unterhalb des Listenfeldes.
Da wir das Listenfeld oben und unten verankert haben, müssen wir die Schaltfläche unten verankern, damit sie immer unterhalb des Listenfeldes angezeigt wird. Dazu stellen Sie die Eigenschaft Vertikaler Anker der Schaltfläche auf Unten ein.
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: