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 5/2014.

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

Weiterbildungen verwalten, Teil I

In diesem Beitrag kümmern wir uns um die Verwaltung von Weiterbildungen für Mitarbeiter. Dabei soll man für jede Weiterbildung mehrere Einheiten beziehungsweise Termine festlegen können, die dann beliebig oft angeboten werden können. Den Mitarbeitern teilt man mit der Beispielanwendung die Weiterbildungen zu und kann die Teilnahme eines jeden Mitarbeiters an den einzelnen Terminen protokollieren.

Die Datenbank zur Verwaltung von Weiterbildungen soll zunächst die Mitarbeiter verwalten, die an den Weiterbildungen teilnehmen. Dazu erstellen wir zunächst zwei Tabellen namens tblMitarbeiter und tblAnreden. Die Tabelle tblMitarbeiter soll dabei die üblichen Daten enthalten wie Anrede, Vorname, Nachname, Straße, PLZ, Ort, Telefon, Telefax, E-Mail und noch ein Bemerkungen-Feld – für alle Fälle. Die Tabelle tblAnreden speichert die Anreden und ist über das Fremdschlüsselfeld AnredeID der Tabelle tblMitarbeiter mit dieser verknüpft. Da solche Tabellen quasi in jedem Beispiel vorkommen, an dieser Stelle nur der Überblick über die beiden Tabellen samt Beziehung im Datenmodell (s. Bild 1).

Die Tabellen tblMitarbeiter und tblAnreden im Beziehungen-Fenster

Bild 1: Die Tabellen tblMitarbeiter und tblAnreden im Beziehungen-Fenster

Weiterbildungen verwalten

Wesentlich spannender wird das Verwalten der Weiterbildungen. Jede Weiterbildung soll einen Anbieter haben, der in der Tabelle tblAnbieter gespeichert wird. Außerdem legen wir zwei Felder namens Standardintervall und Standardtag an. Das Feld Standardintervall gibt ein Intervall in Wochen vor, in dem die Veranstaltungen stattfinden. Standardtag legt den Wochentag fest, an dem die Weiterbildung üblicherweise stattfindet. Beide können später individuell angepasst werden.

Das war der einfache Teil. Nun kommen nämlich noch einige weitere Informationen, die in Tabellen gegossen werden wollen. Dabei verstehen wir unter Weiterbildung zunächst die Bezeichnung einer Weiterbildungsmaßnahme. Legen wir diese Tabelle, die im Entwurf wie in Bild 2 aussieht, schon einmal an. Sie enthält ein Feld zum Eintragen der Bezeichnung der Weiterbildung sowie ein Fremdschlüsselfeld zur Tabelle tblAnbieter. Das Feld Weiterbildung erhält außerdem einen eindeutigen Index, damit jede Bezeichnung nur einmal vergeben werden kann.

Entwurf der Tabelle tblWeiterbildungen

Bild 2: Entwurf der Tabelle tblWeiterbildungen

Wei­ter­bil­dungs­veranstaltungen

Jede Weiterbildung hat eine gewisse Anzahl von Veranstaltungen – manche haben vielleicht nur eine, andere laufen über mehrere Monate mit wöchentlichen Terminen.

Jede Weiterbildung mit ihren Veranstaltungen wird aber in der Regel nicht nur einmalig ausgeführt, sondern startet beispielsweise einmal im Jahr oder alle paar Monate. Vielleicht läuft eine Weiterbildung auch gleich in mehreren Auflagen parallel oder zeitlich versetzt.

Also haben wir nun schon Weiterbildungen mit jeweils mehreren Veranstaltungen, die gegebenenfalls immer wieder neu starten. Also müssen wir auch noch irgendwie die konkreten Termine verwalten, an denen die einzelnen Weiterbildungsveranstaltungen ausgeführt werden.

Um ehrlich zu sein: Das eigentliche Problem war hier nicht, die Tabellen und ihre Inhalte zu erstellen und in Beziehung zu setzen, sondern diese mit sinnvollen Bezeichnungen zu versehen. Im Prinzip gibt es ja jede Weiterbildung einmal als eine Art Vorlage mit ihren einzelnen Veranstaltungen und einmal als Instanz mit den tatsächlichen Terminen. Also legen wir die folgende Aufteilung fest: Wir erstellen eine Tabelle namens tblWeiterbildungen, welche die Bezeichnung der Weiterbildung und weitere Informationen wie den Anbieter aufnimmt. Als Bezeichnungen dienen dann etwa "VBA mit Access für Einsteiger" oder "VBA mit Access für Fortgeschrittene". Außerdem nimmt die Tabelle zwei Felder namens Standardintervall und Standardtag auf – dazu später mehr.

Als nächstes legen wir in einer Tabelle namens tblWeiterbildungsveranstaltungen die einzelnen Veranstaltungen fest, die im einfachsten Fall einfach mit der Weiterbildungsveranstaltung und einer laufenden Nummer versehen werden, also etwa VBA mit Access für Einsteiger I, VBA mit Access für Einsteiger II und so weiter. Diese Einträge müssen natürlich mit der Tabelle tblWeiterbildungen verknüpft werden. Den Entwurf für diese Tabelle finden Sie in Bild 3. Die Tabelle enthält ein Feld zur Bezeichnung der Weiterbildungsveranstaltung und das Fremdschlüsselfeld zur Tabelle tblWeiterbildungen.

Entwurf der Tabelle tblWeiterbildungsveranstaltungen

Bild 3: Entwurf der Tabelle tblWeiterbildungsveranstaltungen

Weiterbildungstermine

Nun fehlen noch die Termine, an denen die einzelnen Veranstaltungen tatsächlich stattfinden. Diese speichern wir in einer Tabelle namens tblWeiterbildungstermine. Hier stellt sich nun die Frage: Mit welcher Tabelle verknüpfen wir die Datensätze dieser Tabelle? Man gerät schnell in Versuchung, diese Datensätze mit der Tabelle tblWeiterbildungen zu verknüpfen. Prinzipiell keine schlechte Idee, aber jeder Weiterbildungstermin ist ja eigentlich eine Instanz einer Weiterbildungsveranstaltung aus der Tabelle tblWeiterbildungsveranstaltungen. So wird dann auch ein Schuh daraus: Wenn wir einen in der Tabelle tblWeiterbildungstermine gespeicherten Termin mit dem entsprechenden Datensatz der Tabelle tblWeiterbildungsveranstaltungen verknüpfen, können wir darüber erstens direkt die Bezeichnung der jeweiligen Veranstaltung ermitteln (also etwa VBA mit Access für Fortgeschrittene VIII). Zweitens erhalten wir über die Beziehung zwischen den Tabellen tblWeiterbildungsveranstaltungen und tblWeiterbildungen dann auch den gewünschten Bezug zur Tabelle tblWeiterbildungen. Die Tabelle sieht nun im ersten Entwurf wie in Bild 4 aus.

Entwurf der Tabelle tblWeiterbildungstermine

Bild 4: Entwurf der Tabelle tblWeiterbildungstermine

Weiterbildungstabellen im Überblick

Schauen wir uns Bild 5 an, um einen Überblick über die Tabellen zur Verwaltung der Weiterbildungen, Veranstaltungen und Termine zu erhalten. Etwas ist dort noch nicht richtig rund. Es handelt sich um die Tatsache, dass wir zwar nun zu jeder Weiterbildung die Veranstaltung und zu jeder Veranstaltung die konkreten Termine festlegen können, aber dass die einzelnen Termine noch nicht zu einer Veranstaltungsreihe zusammengefasst sind. Warum ist das wichtig? Mit dem aktuellen Stand des Datenmodells erhalten wir, wenn die Veranstaltung VBA mit Access für Einsteiger etwa drei Teile enthält (VBA mit Access für Einsteiger I, II und III), für die erste Instanz dieser Veranstaltungsreihe drei Termine. Wenn die Weiterbildung danach erneut angeboten wird, werden die gleichen Termine erneut angelegt. Es gibt dann also jeweils zwei Termine für VBA mit Access für Einsteiger I, II und III. Abgesehen von dem Datum, an dem sich die Zusammengehörigkeit der Termine zu einer Veranstaltungsreihe möglicherweise ablesen lässt (wenn nicht zwei Kurse parallel stattfinden), gibt es keine Möglichkeit, die Zusammengehörigkeit zu erkennen. Aber ist das überhaupt notwendig beziehungsweise gibt es noch weitere Daten, die zusammenfassend für die Termine einer Veranstaltungsreihe aufgezeichnet werden müssen? Solche gibt es durchaus: Zum Beispiel kann es ja sein, dass zwei Kurse gleichzeitig durchgeführt werden, aber jeweils ein anderer Dozent die Ausführung übernimmt. Oder dass Kurse an verschiedenen Orten stattfinden. Wie auch immer: Es scheint, dass wir noch eine weitere Tabelle hinzunehmen müssen, welche die Termine einer Weiterbildung zusammenfasst. Die Frage ist nur: Wie nennen wir diese? tblWeiterbildungsreihen sollte eigentlich ein passender Name für die Tabelle sein (s. Bild 6).

Tabelle zur Zusammenfassung mehrerer Weiterbildungstermine zu einer Reihe

Bild 5: Tabelle zur Zusammenfassung mehrerer Weiterbildungstermine zu einer Reihe

Datenmodell der Tabellen rund um die Weiterbildung

Bild 6: Datenmodell der Tabellen rund um die Weiterbildung

Diese Tabelle soll neben dem Primärschlüsselfeld zunächst ein Fremdschlüsselfeld zur Tabelle tblWeiterbildungen erhalten. Desweitern gibt es zwei weitere Fremdschlüsselfelder zu den Tabellen tblDozenten und tblWeiterbildungsorte, die jedoch der Einfachheit halber neben dem Primärschlüsselfeld nur jeweils ein einziges Feld zur Angabe einer Bezeichnung enthalten (beim Dozenten etwa Dr. Jürgen Müller, beim Weiterbildungsort zum Beispiel VHS Duisburg, Raum 123).

Neben der neuen Tabelle benötigen wir noch ein weiteres Feld in der Tabelle tblWeiterbildungstermine, denn irgendwie müssen wir ja festlegen, welche Termine zu einer Weiterbildungsreihe zusammengefasst werden. Also fügen wir auch dieser Tabelle ein Fremschlüsselfeld namens WeiterbildungsreiheID hinzu, welches die Tabelle mit der Tabelle tblWeiterbildungsreihen verknüpft.

Zusammengefasst hat sich also nun einiges geändert im Datenmodell, das nun wie in Bild 8 aussieht. Bevor wir uns die Gestaltung der Formulare zur Verwaltung der Weiterbildungen anschauen, kommen wir auf die Mitarbeiter zurück.

Datenmodell mit der Tabelle zur Zusammenfassung der Weiterbildungstermine

Bild 7: Datenmodell mit der Tabelle zur Zusammenfassung der Weiterbildungstermine

Formulare zur Mitarbeiterverwaltung

Zur Verwaltung der Mitarbeiter verwenden wir zunächst ein Übersichtsformular, das aus dem Hauptformular frmMitarbeiterUebersicht und dem Unterformular sfmMitarbeiterUebersicht besteht.

Das Hauptformular enthält lediglich das Unterformularsteuerelement mit dem Unterformular sowie zwei Schaltflächen namens cmdNeuerMitarbeiter und cmdMitarbeiterAnzeigen (neben einem Icon und einer Überschrift im Formularkopf) – s. Bild 7.

Das Formular zur Anzeige der Mitarbeiterübersicht

Bild 8: Das Formular zur Anzeige der Mitarbeiterübersicht

Das Unterformular verwendet als Datenherkunft die Tabelle tblMitarbeiter und zeigt alle Felder dieser Tabelle an. Als Standardansicht verwendet das Formular das Datenblatt.

Neuen Mitarbeiter anlegen

Ein Klick auf die Schaltfläche cmdNeuerMitarbeiter soll ein weiteres Formular namens frmMitarbeiterdetails öffnen und einen neuen, leeren Datensatz anzeigen. Dazu löst der Mausklick auf diese Schaltfläche die Prozedur aus Listing 1 aus. Diese ruft das Formular frmMitarbeiterdetails auf und übergibt für den Parameter DataMode den Wert acFormAdd, damit das Formular gleich einen neuen, leeren Datensatz anzeigt.

Private Sub cmdNeuerMitarbeiter_Click()
     Dim lngMitarbeiterID As Long
     DoCmd.OpenForm "frmMitarbeiterDetails", DataMode:=acFormAdd, WindowMode:=acDialog
     If IstFormularGeoeffnet("frmMitarbeiterdetails") Then
         lngMitarbeiterID = Forms!frmMitarbeiterdetails!MitarbeiterID
         DoCmd.Close acForm, "frmMitarbeiterdetails"
         Me!sfmMitarbeiterUebersicht.Form.Requery
         Me!sfmMitarbeiterUebersicht.Form.Recordset.FindFirst "MitarbeiterID = " & lngMitarbeiterID
     End If
End Sub

Listing 1: Öffnen des Formulars zum Hinzufügen eines neuen MItarbeiters

Durch den Wert acDialog für den Parameter WindowMode wartet der aufrufende Code, bis das aufgerufene Formular den Fokus verliert.

Dann prüft die Prozedur, ob das Formular noch geöffnet ist (was der Fall ist, wenn der Benutzer dort auf die Schaltfläche cmdOK klickt – siehe weiter unten) oder ob es bereits geschlossen wurde (durch die Schaltfläche cmdAbbrechen).

Ist das Formular noch geöffnet, speichert die Prozedur den Primärschlüsselwert des im Formular frmMitarbeiterdetails neu angelegten Datensatzes in der Variablen lngMitarbeiterID. Danach schließt sie das aktuell nicht sichtbare Formular endgültig. Damit der neue Mitarbeiterdatensatz im Unterformular sfmMitarbeiterUebersicht erscheint, aktualisiert die Prozedur die Datenherkunft dieses Formulars. Schließlich stellt sie den Datensatzzeiger auf den soeben neu hinzugefügten Datensatz ein, dessen Primärschlüsselwert ja in der Variablen lngMitarbeiterID zwischengespeichert wurde.

Mitarbeiterdetails anzeigen

Die Schaltfläche cmdMitarbeiterdetails öffnet ebenfalls dieses Formular, soll aber den aktuell im Unterformular markierten Mitarbeiter mit seinen Daten zur direkten Bearbeitung anzeigen.

Die dazu benötigte Prozedur finden Sie in Listing 2. Die Prozedur prüft zunächst, ob der Benutzer überhaupt einen Datensatz im Unterformular sfmMitarbeiter­Uebersicht ausgewählt hat. Falls nicht, erscheint eine entsprechende Meldung. Hat er einen Mitarbeiter ausgewählt, wird das Formular frmMitarbeiterdetails geöffnet. Dabei übergibt die Prozedur cmdMitarbeiterdetails_Click als WhereCondition einen Ausdruck, der beispielsweise MitarbeiterID = 123 lautet und der dafür sorgt, dass der aktuell ausgewählte Mitarbeiter angezeigt wird.

Private Sub cmdMitarbeiterdetails_Click()
     If Not IsNull(Me!sfmMitarbeiterUebersicht.Form!MitarbeiterID) Then
         DoCmd.OpenForm "frmMitarbeiterdetails", DataMode:=acFormEdit, WhereCondition:="MitarbeiterID = " _
             & Me!sfmMitarbeiterUebersicht.Form!MitarbeiterID
     Else
         MsgBox "Wählen Sie zunächst den anzuzeigenden Mitarbeiter aus."
     End If
End Sub

Listing 2: Öffnen des Formulars frmMitarbeiterdetails zum Anzeigen eines vorhandenen Mitarbeiters

Das so geöffnete Formular sieht schließlich wie in Bild 9 aus. Dies ist allerdings noch nicht der endgültige Zustand des Formulars, da wir dort später noch Steuerelemente zum Verwalten der Weiterbildungen einfügen, an denen der Mitarbeiter teilgenommen hat.

Die Mitarbeiterdetails im passenden Formular

Bild 9: Die Mitarbeiterdetails im passenden Formular

Formulare für die Weiterbildungen

Die obersten Elemente der Hierarchie rund um die Weiterbildungen stammen aus der Tabelle tblWeiterbildungen. Für diese legen wir deshalb zunächst ein Übersichtsformular namens frmWeiterbildungen­Uebersicht an, das wie in Bild 10 aussieht. Das Unterformular sfmWei­ter­bil­dungenUebersicht verwendet die Tabelle tblWeiterbildungen als Datenherkunft.

Formular zur Verwaltung der Weiterbildungen

Bild 10: Formular zur Verwaltung der Weiterbildungen

Die beiden Schaltflächen cmdNeueWeiterbildung und cmdWeiterbildungDetails arbeiten analog zu den entsprechenden Schaltflächen im Formular frmMitarbeiterUebersicht. Das dadurch geöffnete Formular frmWeiterbildungsdetails sieht mit einem neuen, leeren Datensatz zunächst wie in Bild 11 aus.

Das Formular frmWeiterbildungsdetails

Bild 11: Das Formular frmWeiterbildungsdetails

Dort geben Sie den Namen der Weiterbildung ein und wählen einen Anbieter aus. Dummerweise stehen im aktuellen Zustand noch keine Anbieter zur Verfügung. Dafür wollen wir kein eigenes Formular anbieten, sondern einfach nur die Eingabe neuer Datensätze über das Kombinationsfeld erlauben. Dazu legen Sie für das Ereignis Bei nicht in Liste des Kombinationsfeldes cboAnbieterID (wir haben den Namen des Steuerelements um ein entsprechendes Präfix erweitert) die Ereignisprozedur aus Listing 3 an. Diese legt, wenn der Benutzer einen noch nicht in der Tabelle tblAnbieter enthaltenen Anbieter in das Kombinationsfeld einträgt, einen neuen Datensatz in der Tabelle an.

Private Sub AnbieterID_NotInList(NewData As String, Response As Integer)
     Dim db As DAO.Database
     Response = acDataErrAdded
     Set db = CurrentDb
     db.Execute "INSERT INTO tblAnbieter(Anbieter) VALUES('" & NewData & "')", dbFailOnError
     Set db = Nothing
End Sub

Listing 3: Hinzufügen noch nicht vorhandener Einträge in die Datensatzherkunft des Kombinationsfeldes

Damit das Formular nach dem Abschluss der Eingabe in das Kombinationsfeld cboAnbieterID nicht zum nächsten Datensatz wechselt, stellen wir dort außerdem die Eigenschaft Zyklus auf Aktueller Datensatz ein.

Weiterbildungsdetails verwalten

Nun sind der Name der Weiterbildung und der Anbieter ja nicht die einzigen Daten zu einer Weiterbildung (man könnte hier sicher noch weitere Details verwalten, aber das sparen wir uns aus Gründen der Übersichtlichkeit). Die übrigen Daten befinden sich allerdings in anderen Tabellen – so zum Beispiel die Weiterbildungsveranstaltungen. Diese fügen wir als Erstes zum Formular frmWeiterbildungsdetails hinzu, und zwar in Form des Unterformulars sfmWeiterbildungsveranstaltungen. Dieses verwendet eine Abfrage als Datenherkunft, die auf der Tabelle tblWeiterbildungsveranstaltungen basiert. Die Abfrage sortiert die enthaltenen Datensätze nach dem Wert des Feldes ReihenfolgeID. Allerdings sollen nur die zwei Felder Weiterbildungsveranstaltung und ReihenfolgeID in der Datenblattansicht angezeigt werden.

Damit das Unterformular nur die Daten zum aktuell im Hauptformular angezeigten Datensatz liefert, sollte Access gleich beim Einfügen die beiden Eigenschaften Verknüpfen von und Verknüpfen nach auf den Wert WeiterbildungID einstellen (s. Bild 12).

Das Formular frmWeiterbildungsdetails mit Unterformular

Bild 12: Das Formular frmWeiterbildungsdetails mit Unterformular

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.