Veranstaltungskalender

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 Bild 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

Bild 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 Bild 2 aus.

pic002.png

Bild 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 Bild 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

Bild 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 Bild 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

Bild 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 Bild 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

Bild 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
End Sub

Die Schaltfläche cmdAbbrechen schließt ebenfalls das Formular, verwirft aber zuvor noch die änderungen:

Private Sub cmdAbbrechen_Click()
    Me.Undo
    DoCmd.Close acForm, Me.Name
End Sub

Kümmern wir uns nun noch um den beim Aufruf übergebenen OpenArgs-Parameter. Dieser enthält den aktuellen Wert des Feldes VeranstaltungID. Damit es als Standardwert des entsprechenden Fremdschlüsselfeldes der Tabelle tblTermine eingetragen wird, legen Sie eine Prozedur für das Ereignis Beim Öffnen an und fügen die folgende Anweisung hinzu:

Private Sub Form_Open(Cancel As Integer)
    Me!VeranstaltungID.DefaultValue = Me.OpenArgs
End Sub

Auf diese Weise wird der neue Datensatz gleich mit dem entsprechenden Datensatz der Tabelle tblVeranstaltungen verknüpft.

Das Eingabeformular soll jeweils zur Bearbeitung eines einzigen Termins dienen, also blenden Sie die Navigationsschaltflächen und den Datensatzmarkierer durch Einstellen der entsprechenden Eigenschaften auf den Wert Nein aus. Außerdem soll das Fenster zentriert erscheinen, was Sie durch Einstellen von Automatisch zentrieren auf Ja erreichen. Da die Größe des Fensters nicht veränderlich ist, deaktivieren Sie auch die Eigenschaft Bildlaufleisten.

Termininformationen vorbelegen

Einige Daten des Termins wie etwa der Titel und die Beschreibung sollen entsprechend der Information zur betroffenen Veranstaltung vorbelegt werden.

Dazu gibt es mehrere Möglichkeiten: Entweder das Formular frmTermine liest diese vom Formular frmVeranstaltungen ein, die Daten werden ebenfalls mit dem OpenArgs-Argument übergeben oder sie werden auf Basis des übergebenen Werts für das Feld VeranstaltungID aus der Tabelle ausgelesen.

Termin bearbeiten

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

den kompletten Artikel im PDF-Format mit Beispieldatenbank

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar