Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 6/2011.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

Zusammenfassung

Verwalten Sie Veranstaltungen mit einem oder mehreren Terminen oder Alternativterminen in einem Formular.

Techniken

Formulare, VBA, Bedingte Formatierung

Voraussetzungen

Access 2000 und höher

Beispieldateien

Veranstaltungskalender.mdb

Shortlink

www.access-im-unternehmen.de/809

Veranstaltungskalender

André Minhorst, Duisburg

Wer Veranstaltungen und sonstige Termine plant, der weiß, dass es schwierig ist, die Übersicht zu behalten. Hier mit Outlook zu arbeiten, mag schon sinnvoll sein. Allerdings bietet Outlook nicht die Möglichkeit, etwa zu einer Veranstaltung Alternativtermine oder Terminserien zu verwalten. Diese Funktion soll der Kernaspekt der im vorliegenden Beitrag beschriebenen Lösung sein, aber es gibt noch mehr zu entdecken - zum Beispiel die Darstellung der Termine in Formularen und Berichten sowie deren Eingabe. Und nicht zuletzt besteht auch das Datenmodell aus mehr als einer Tabelle zum Speichern der Termine ...

Termine, Termine, Termine

Eine Veranstaltung kann einen oder mehrere Termine enthalten. In letzterem Fall wäre es eine Veranstaltungsreihe. Bei der Planung eines Veranstaltungstermins oder auch der Termine einer Veranstaltungsreihe kann es sein, dass nicht nur einer, sondern gleich mehrere Termine zur Auswahl stehen und noch nicht festgelegt werden können. Dies lässt sich im Datenmodell auf verschiedene Arten abbilden. Da es für jede Veranstaltung einen oder mehrere Termine geben kann, ist sicher, dass es eine Veranstaltungstabelle gibt und zusätzlich eine Termintabelle. Termine werden aber nicht immer gleich fixiert - stattdessen hält man sich mehrere Daten für einen Termin frei.

Eine Möglichkeit, dies im Datenmodell abzubilden, wäre das Anlegen einer Tabelle für einen Termin einer Veranstaltung beziehungsweise die Termine einer Veranstaltungsreihe. Diese Tabelle würde aber nur die Basisdaten des Termins enthalten (also Thema, Ort und so weiter) und nicht das Datum. Dieses würde in einer weiteren Tabelle mit den möglichen Veranstaltungszeiten enthalten sein. Andererseits kann es ja auch sein, dass mit den Terminen auch etwa die Veranstaltungsorte variieren.

Und hier geht die Tendenz dorthin, keine eigene Tabelle für die Terminalternativen vorzuhalten, sondern die alternativen Termine einfach etwa über eine eindeutige ID als zusammengehörend zu kennzeichnen. Sprich: Es gibt eine Tabelle mit Veranstaltungen und eine mit Terminen. Die Zugehörigkeit eines Termins zu einer Veranstaltung wird über ein entsprechendes Fremdschlüsselfeld realisiert, so können dann auch Terminserien erfasst werden. Die Reihenfolge der Termine einer Terminserie ergibt sich aus deren Datumsangaben.

Fehlen noch die Alternativtermine. Jeder neue Termin soll neben dem Primärschlüsselfeld noch eine weitere ID erhalten, die etwa aus einer Hilfstabelle stammt oder einfach dynamisch erzeugt wird. Wenn der Benutzer einen Alternativtermin anlegen möchte, erhält dieser die gleiche ID wie der Termin, auf dessen Basis der Alternativtermin angelegt wurde.

Wenn wir nun noch eine Tabelle zum Speichern von Veranstaltungskategorien hinzunehmen, die von der Tabelle mit den Veranstaltungen aus per Fremdschlüsselfeld referenziert wird, sieht das Datenmodell wie in Abb. 1 aus. Die Tabelle tblVeranstaltungen nimmt die grundlegenden Veranstaltungsdaten auf. Die Tabelle tblTermine ist über das Feld VeranstaltungID mit der Tabelle tblVeranstaltungen verknüpft. Auf diese Weise können ein oder mehrere Termine einer Veranstaltung zugewiesen werden. Die Tabelle tblTermine enthält weiterhin ebenfalls die Felder Titel und Beschreibung, Termindatum, Startzeit und Endzeit. Das Feld AlternativID erhält beim Anlegen des ersten Termins eine eindeutige ID. Sollen Alternativtermine zu einem Termin angelegt werden, erhalten diese die gleiche AlternativID wie der betroffene Termin.

pic001.png

Abb. 1: Datenmodell der Terminverwaltung

Das Feld KategorieID der Tabelle tblVeranstaltungen legen Sie als Nachschlagefeld aus, damit beim Anlegen von Steuerelementen auf Basis dieses Feldes in Formularen gleich ein Kombinationsfeld erstellt wird.

Beim Feld VeranstaltungID der Tabelle tblTermine ist dies nicht nötig, da dieses später nur die Zuordnung von den Terminen im Unterformular zu den Veranstaltungen im Hauptformular herstellen soll. Stattdessen legen Sie die Beziehung direkt im Beziehungen-Fenster an.

Eingabe der Veranstaltungsdaten

Die eigentlichen Veranstaltungsdaten geben Sie in das Hauptformulars frmVeranstaltungen ein. Dieses verwendet die Tabelle tblVeranstaltungen als Datenherkunft und enthält die Felder VeranstaltungID, Titel, Beschreibung und KategorieID dieser Tabelle. Das Feld VeranstaltungID ist als Autowert ausgelegt und somit vielleicht nicht optimal zur Referenzierung von Veranstaltungen geeignet. Sie können ein Feld zur Eingabe individueller Veranstaltungsnummern anlegen, die mehr Aussagekraft haben - beispielsweise mit Kürzeln wie MS01 für Mitarbeiterschulung 01. Das Formular sieht in der Entwurfsansicht wie in Abb. 2 aus.

pic002.png

Abb. 2: Hauptformular zur Eingabe der Veranstaltungen in der Entwurfsansicht

Termine anzeigen

Wie Sie die Termine zur aktuellen Veranstaltung des Hauptformulars anzeigen, hängt davon ab, ob diese direkt bearbeitet werden sollen oder ob dies in einem externen Formular geschehen soll. Für die direkte Bearbeitung verwenden Sie ein Unterformular in der Datenblatt- oder Endlosansicht, bei Bearbeitung im separaten Formular können Sie alternativ ein Listenfeld verwenden.

In diesem Fall scheint eine Kombination sinnvoll. Die Termine sollten schon direkt editierbar sein, weil das einfach praktischer ist und schneller funktioniert, als wenn Sie für jede Änderung ein Detailformular öffnen würden. Andererseits kann gerade das Anlegen von Alternativterminen direkt im Unterformular in der Datenblatt- oder Endlosansicht verwirren: Prinzipiell soll dazu nämlich zunächst der Termin-Datensatz, zu dem ein Alternativtermin erstellt werden soll, kopiert werden. Dann zeigt das Unterformular zwei identische Termine an. Welchen davon soll der Benutzer dann bearbeiten? Also öffnet die Anwendung besser gleich ein Detailformular zur Bearbeitung des neuen Termins und fügt diesen nach dem Schließen des Detailformulars in der Liste der Termine an. Das Vorhandensein von Alternativterminen wirkt sich auch auf die Auswahl der Listendarstellung aus: Es wäre doch äußerst praktisch, wenn alternative Termine zusammenhängend angezeigt würden - am besten noch durch eine gemeinsame Farbe markiert. Hier scheidet das Listenfeld aus.

Unterformular zur Anzeige der Termine

Also ein Unterformular - in der Datenblattansicht oder doch als Endlosformular? Das hängt davon ab, ob Sie die Schaltflächen etwa zum Anlegen eines Alternativtermins, zum Löschen oder zum Bearbeiten in jeder Zeile anzeigen möchten oder doch lieber über oder unter dem Unterformular. Sollen die Bedienelemente für jeden Datensatz bereitstehen, verwenden Sie ein Endlosformular, sonst die Datenblattansicht (natürlich können Sie auch das Endlosformular verwenden und dabei die Schaltflächen über oder unter dem Formular anzeigen, aber in einem Unterformular in der Datenblattansicht bringen Sie definitiv keine Schaltflächen unter). Da die Daten gleich im Unterformular bearbeitet werden sollen, entscheiden wir uns für die Darstellung im Endlosformular und somit dafür, jedem Termin-Datensatz einen eigenen Satz Schaltflächen zum Löschen, Bearbeiten et cetera zuzuordnen.

In der Entwurfsansicht sieht das Formular mit der Bezeichnung sfmTermine wie in Abb. 3 aus. Das Formular verwendet zunächst die Tabelle tblTermine als Datenherkunft. Zunächst deshalb, weil Sie damit erstmal die benötigten Felder aus der Feldliste in den Detailbereich ziehen und das Formular layouten können. Später werden wir die Tabelle durch eine Abfrage ersetzen.

pic003.png

Abb. 3: Unterformular zur Anzeige der Termine

Stellen Sie die Eigenschaft Standardansicht des Formulars auf Endlosformular ein. Die Steuerelemente verteilen Sie wie in der Abbildung auf den Formularkopf und den Detailbereich. Unter Access 2007 und jünger gelingt das ganz einfach, indem Sie alle betroffenen Steuerelemente markieren und im Ribbon den Eintrag Anordnen|Tabelle|Tabelle ausführen. Rechts neben den Feldern platzieren Sie drei Schaltflächen namens cmdBearbeiten, cmdLoeschen und cmdAlternativterminAnlegen. Um Platz zu sparen, haben wir die Symbole ... (Bearbeiten), X (Löschen) und * (Alternativtermin anlegen) als Beschriftung der Schaltflächen verwendet.

Veranstaltungen mit Terminen anzeigen

Nun ziehen Sie das Formular sfmTermine aus dem Datenbankfenster beziehungsweise dem Navigationsbereich als Unterformular in das im Entwurf geöffnete Formular frmVeranstaltungen.

Normalerweise sollten die beiden Eigenschaften Verknüpfen von und Verknüpfen nach des Unterformulars nun wie in Abb. 4 gefüllt sein. Dies besagt, dass das Unterformular nur solche Datensätze anzeigt, deren Fremdschlüsselfeld VeranstaltungID den gleichen Wert wie das gleichnamige Feld im Hauptformular aufweist. Sollten diese beiden Eigenschaften nicht gefüllt sein, holen Sie dies nach.

pic004.png

Abb. 4: Haupt- und Unterformular werden über die Eigenschaften Verknüpfen von und Verknüpfen nach verbunden.

Nun können Sie schon in die Formularansicht wechseln und Veranstaltungen eingeben. Termine zu den Veranstaltungen sollen nur über ein weiteres Formular namens frmTermine eingegeben werden können. Daher stellen wir die Eigenschaft Anfügen zulassen des Unterformulars auf Nein ein. Dafür müssen Sie aber dann eine Schaltfläche im Formular anlegen, mit der der Benutzer das Formular frmTermine zum Anlegen neuer Termine öffnen kann. Diese Schaltfläche soll cmdNeuerTermin heißen und das Formular frmTermine als modalen Dialog nur zum Anlegen eines neuen Datensatzes öffnen. Außerdem soll mit dem Öffnungsargument der Wert des Feldes VeranstaltungID der aktuell im Hauptformular angezeigten Veranstaltung übergeben werden, damit dieses gleich als Standardwert für das entsprechende Fremdschlüsselfeld übernommen werden kann. Nach dem Schließen des Formulars frmTermine soll der Inhalt des Unterformulars sfmTermine aktualisiert werden, damit der neue Termin auch angezeigt wird. Die per Mausklick ausgelöste Prozedur sieht so aus:

Private Sub cmdNeuerTermin_Click()

    DoCmd.OpenForm "frmTermine", WindowMode:=acDialog, DataMode:=acFormAdd, OpenArgs:=Me!txtVeranstaltungID

    Me!sfmTermine.Form.Requery

End Sub

Termine anlegen

Neue Termine und Alternativtermine werden im Formular frmTermine angelegt. Dort findet auch die Bearbeitung bestehender Termine statt, soweit Felder betroffen sind, die in der Übersicht nicht angezeigt werden. Das Formular verwendet die Tabelle tblTermine als Datenherkunft und zeigt die Felder dieser Tabelle wie in der Entwurfsansicht aus Abb. 5 an. Die beiden Felder AlternativID und VeranstaltungID werden gleich zwar benötigt, sollen aber nicht angezeigt werden. Daher stellen Sie deren Eigenschaft Sichtbar auf den Wert Nein ein (dies können Sie später erledigen, um vorerst die Inhalte dieser Felder kontrollieren zu können).

pic005.png

Abb. 5: Das Formular zum Eingeben neuer Termine

Außerdem enthält das Formular zwei Schaltflächen namens cmdOK und cmdAbbrechen mit entsprechender Beschriftung. Die Schaltfläche cmdOK löst folgende Ereignisprozedur aus:

Private Sub cmdOK_Click()

    DoCmd.Close acForm, Me.Name

Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

Sind Sie Abonnent?Jetzt einloggen ...
 

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

© 2003-2015 André Minhorst Alle Rechte vorbehalten.