Schulungen und Kurse verwalten

Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.

Autor: Martin Hoffmann, Düsseldorf

!

Die Weiterbildung und Qualifizierung von Mitarbeitern ist einerseits ein wichtiger Faktor zur Sicherung des Know-hows eines Unternehmens und andererseits ein Motivationsfaktor für die Mitarbeiter. Die Verwaltung der Schulungsmaßnahmen kann dabei mit steigender Mitarbeiter- und Kurszahl sehr komplex ausfallen, insbesondere dann, wenn Kurse aufeinander aufbauen oder vorgegebene Noten erzielt werden müssen. Der folgende Beitrag zeigt Ihnen, wie Sie eine Schulungsverwaltung erstellen, mit der Sie komfortabel Teilnehmer zu Kursen anmelden, die Teilnahme kontrollieren und Zertifikate bei Abschluss drucken.

Die Schulungsverwaltung, die Sie in diesem Beitrag kennen lernen, hilft Ihnen dabei, die Schulungsmaßnahmen für Mitarbeiter zu verwalten und zu organisieren. Das beginnt bei der automatisierten Eingabe der Kurse mit Einzelterminen für jeden Kurs. Bild 1 zeigt die Dialoge der Kursverwaltung. Weitere Unterstützung erhalten Sie bei der Anmeldung von Teilnehmern für Kurse, wobei die Schulungsverwaltung Fehler durch eine intelligente Anmeldeprüfung abfängt (siehe Bild 2). Zu guter Letzt unterstützt die Software Sie bei der Erstellung der Teilnahmenachweise und der Eingabe der Abschlussnote.

Bild 1: Erfassen von Kursen und Kurseinheiten

Hinweis

Die Software ist hier beispielhaft auf Mitarbeiter ausgerichtet. Sie können die Anwendung natürlich für jede beliebige andere Art von Schulungs- oder Kursangeboten einsetzen. So kann beispielsweise das Sportangebot einer Sportschule verwaltet werden, bei der mehrere aufeinander aufbauende Tauchkurse angeboten werden. Aber auch für Schulungsunternehmen ist die Anwendung sehr interessant. In diesem Fall sind die Mitarbeiter lediglich durch allgemeine Adressen auszutauschen.

Im Folgenden werden die Tabellen der Datenbank mit deren Beziehungen erläutert. Die Ausführungen sind für diese Musterlösung ein wenig ausführlicher, da das Datenmodell aufgrund der speziellen Anforderungen relativ komplex ist.

Bild 2: Der Anmeldedialog

Bild 3: Die Tabellenstruktur für die Kurseingabe

Mitarbeiter

Die Mitarbeiter, also die eigentlichen Teilnehmer der Kurse, werden in der Tabelle tblMitarbeiter gespeichert. Die Anwendung verzichtet hier aus Platzgründen auf eine ausgefeilte Adressverwaltung, da dies bereits in anderen Beiträgen ausgiebig behandelt wurde.

Kursgruppen und Kurse

Die Kursverwaltung gliedert alle Kurse in Obergruppen. Zu jedem Kurs können Sie außerdem mehrere Starttermine mit den jeweiligen einzelnen Kurszeiten eintragen (Termine und Termindetails siehe Abschnitt 2.3). Zusätzlich ist bei jedem Kurs die Angabe von weiteren Kursen möglich, deren erfolgreiche Abschlüsse Voraussetzung für die Teilnahme an dem aktuellen Kurs sind. Abb. 3 stellt die entsprechende Tabellenstruktur dar.

Kursgruppen

Die Obergruppen verwalten Sie in der Tabelle tblKursgruppen. Die Tabelle besteht lediglich aus dem Primärschlüssel und dem Feld Kursgruppe, über das Sie den Namen der Gruppe definieren.

Kurse

Zu jeder Kursgruppe können Sie dann beliebig viele Kurse anlegen, die Sie dann in der Tabelle tblKurse speichern.

über das Feld Kursname definieren Sie die eindeutige Bezeichnung des Kurses. Das Kuerzel des Kurses wird später für die Kursnummer verwendet und kann jeweils wie der Kursname nur einmal vergeben werden. Beide Felder (Kuerzel und Kursname) sind mit der Option Ja (Ohne Duplikate) indiziert, um Doppeleingaben zu vermeiden. Das Feld Kurslevel gibt die Schwierigkeitsstufe eines Kurses wieder.

Kursintervalle

Mit den Feldern AnzahlEinheiten, DauerProEinheitInStunden, TerminIntervall und TerminIntervallID geben Sie an, wie lange eine Kurseinheit dauert, wie viele Einheiten es gibt und in welchem Rhythmus die Einheiten aufeinander folgen.

Das Feld TerminIntervallID referenziert dabei auf die Tabelle tblTerminintervalle. Die Tabelle beinhaltet die in Tab. 1 aufgeführten Datensätze, die vom Anwender nicht verändert werden dürfen und fest in die Anwendung und Programmierung integriert sind.

TerminintervallID

Intervall

Intervallformat

1

Tag(e)

d

2

Woche(n)

ww

3

Monat(e)

m

4

Jahr(e)

yyyy

Tab. 1: Daten der Tabelle tblTerminintervalle

Das Feld Intervall dient der Anzeige und Auswahl des Intervalls im Formular, das Feld Intervallformat ist für die automatische Berechnung der Folgedaten nötig. Nachfolgend sind drei Beispiele aufgeführt, welche die Verwendung der Felder verdeutlichen.

Beispiel 1: Der Kurs Einführung in Access findet jeweils an drei aufeinander folgenden Tagen statt. Pro Tag sind acht Stunden angesetzt:

Feld

Wert

AnzahlEinheiten

3

DauerProEinheitInStunden

8

TerminIntervall

1

TerminIntervallID

1 (Tage)

Tab. 2: Beispiel 1, Zusammenhängender Kurs

Beispiel 2: Der folgende Kurs geht über ein Jahr. Jede Woche findet eine Sitzung von zwei Stunden statt.

Feld

Wert

AnzahlEinheiten

52

DauerProEinheitInStunden

2

TerminIntervall

1

TerminIntervallID

2 (Woche)

Tab. 3: Beispiel 2, Kurs mit mehreren verteilten Terminen

Beispiel 3: Die nächsten zehn Jahre findet alle zwei Jahre ein Erste-Hilfe-Kurs für alle statt. Der Kurs dauert jeweils vier Stunden.

Feld

Wert

AnzahlEinheiten

5

DauerProEinheitInStunden

4

TerminIntervall

2

TerminIntervallID

4 (Jahr)

Tab. 4: Beispiel 3, Zweijähriger Kurs

Kursabschluss

Die Felder AbschlussID und Mindestnote legen fest, welcher Abschluss für den Kurs erforderlich ist. Mögliche Abschlüsse sind in der Tabelle tblAbschluesse gespeichert (s. Tab. 5).

Bedingung

IstMindestnoteErforderlich

IstSichtbarBeiKurs

Nicht bestanden

Nein

Nein

Teilgenommen

Nein

Ja

Bestanden

Ja

Ja

Abschlussprüfung

Ja

Ja

Tab. 5: Datensätze der Tabelle tblAbschluesse

Hinweis

Das Feld IstSichtbarBeiKurs dient zur selektierten Anzeige der Abschlüsse im Kursformular. Später werden nur die Abschlüsse angezeigt, die den Wert Ja haben. Den Eintrag Nicht bestanden als Mindestvoraussetzung zur Auswahl zu stellen, würde hier keinen Sinn machen. Deshalb wird er einfach ausgeblendet.

Praxis-Tipp

Die Selektion bestimmter Datensätze aus einer Tabelle könnte auch über den Primärschlüssel erfolgen. Im vorliegenden Fall wäre das die ID 1 (Nicht bestanden), die in den Stammdaten des Kurses nicht angezeigt werden soll. Eine Abfrage, die alle Datensätze anzeigt, bei denen die ID <> 1 ist, wäre vielleicht einfacher als ein eigenes Feld dafür einzuführen. Allerdings ist diese Methode nicht sehr flexibel. Ggf. ergänzen Sie die Tabelle um weitere Datensätze (zum Beispiel Nicht Teilgenommen), die ebenfalls nicht angezeigt werden sollen. In diesem Fall müssten Sie alle betroffenen Abfragen anpassen. Gleiches gilt, wenn Sie die Datensätze zu Testzwecken löschen und wieder neu einfügen. Die ID wäre dann vielleicht nicht mehr 1, sondern 5, und es wären wieder änderungen an der Abfrage erforderlich. Mit dem Ja/Nein-Feld genügt ein einfaches Abhaken des Feldes.

Das Feld IstMindestnoteErforderlich gibt an, ob das Feld Mindestnote der Tabelle tblKurse im Formular sichtbar ist. Wird eine Mindestnote in den Kursdaten eingegeben, gilt der Kurs nur bei Erreichen der angesetzten Note als erfolgreich bestanden.

Teilnehmerzahl

Das Feld TeilnehmerzahlMinimal der Tabelle tblKurse definiert, wie viele Teilnehmer für einen Kurs angemeldet sein müssen, damit der Kurs stattfindet. über das Feld TeilnehmerzahlMaximal hingegen legen Sie die obere Grenze für die Teilnehmeranzahl fest, um überfüllte Kurse zu vermeiden.

Kursvoraussetzungen

Zu jedem Kurs können neben den Basisdaten weitere Kurse angegeben werden, die Voraussetzung für die Teilnahme an dem Kurs sind. Beispielsweise ist der Kurs Einführung in Access Voraussetzung für den Kurs Access für Fortgeschrittene.

Die Zuordnung der Kurse erfolgt über die Tabelle tblKursvoraussetzungen. Die Tabelle dient als Zwischentabelle für eine n:m-Beziehung der Kurstabelle auf sich selbst. Das heisst, dass jedem Kurs mehrere andere Kurse zugeordnet werden können und ein Kurs mehreren Kursen zugeordnet sein kann. Einführung in Access könnte so auch Voraussetzung für den Kurs Einführung in den MS SQL Server sein.

Die Verknüpfung der Kurstabelle erfolgt über die Felder KursID und VoraussetzungsKursID (siehe Bild 3).

Bild 4: Datenstruktur für Termine

Termine für Kurse

Nachdem die Kurse definiert sind, benötigen Sie die einzelnen Starttermine für die Kurse sowie die Detaildaten mit Anfangs- und Endzeit für jede Kurseinheit. Nur mit diesen Detaildaten können Sie später den Teilnehmern eine genaue Liste der Kurszeiten zusenden oder einen Stundenplan bzw. die Raumbelegung ausgeben. Bild 4 zeigt die dafür nötigen Tabellen.

Termine

Zu jedem Kurs können Sie in der Tabelle tblTermine beliebig viele Termine anlegen. Auf diese Weise kann zum Beispiel der Kurs Einführung in Access alle drei Wochen stattfinden. Jeder Kurs erhält eine eindeutige Kursnummer, über die Sie einen speziellen Kurs bei der Suche direkt identifizieren können.

Das Startdatum legt fest, wann der Kurs beginnt. Dabei ist die Eingabe eines Datums mit Uhrzeit möglich, wodurch Sie direkt die Anfangszeit festlegen können. Für den dreiwöchigen Access-Kurs, der montags um 8:00 Uhr startet, wären dann die folgenden Startdaten erforderlich:

  • 07.04.2003 08:00
  • 28.04.2003 08:00
  • 19.05.2003 08:00
  • usw.
  • Pro Kurs legen Sie noch den Kursleiter (KursleiterID) und den Raum (RaumID) fest. Bei den Kursleitern und Räumen wurde zugunsten der übersichtlichkeit wie bei den Mitarbeitern auf eine komplexe Ausführung der Tabellenstruktur verzichtet. Der Kursleiter erhält nur einen Namen mit Anrede, bei Räumen begnügt sich die Datenstruktur mit der Raumnummer.

    Termindetails

    Die einzelnen Kurseinheiten zu jedem Starttermin geben Sie in die Tabelle tblTermindetails mit Anfangs- und Endzeit ein.

    Bild 5: Tabellenstruktur für die Kursteilnehmer

    Hinweis

    Die Eingabe der vollständigen Kursdaten kann schnell unübersichtlich werden. Zu diesem Zweck werden die Termindetails später automatisch vom Programm auf Basis der im Kurs definierten Kursintervalle angelegt.

    Für den Kurs Einführung in Access – einen Drei-Tage-Kurs – könnten die Termine wie folgt aussehen (s. Tab. 6):

    Startdatum

    Enddatum

    07.04.2003 08:00

    07.04.2003 16:00

    08.04.2003 08:00

    08.04.2003 16:00

    09.04.2003 08:00

    09.04.2003 16:00

    Tab. 6: Beispieldaten für Termindetails

    Kursteilnehmer

    Kurse und Mitarbeiter sind nun definiert. Jetzt fehlt nur noch die Zuordnung. Dazu sind zwei Tabellen notwendig.

    Die erste Tabelle tblKursteilnehmer definiert, welcher Mitarbeiter für welchen Kurstermin angemeldet ist.

    Die Tabelle tblTeilnahmenachweise ergänzt dazu, zu welchen Kurseinheiten ein Teilnehmer erschienen ist, und hält so den Teilnahmenachweis fest. Die Verknüpfung der Tabellen ist in Bild 5 dargestellt.

    Kursteilnehmer

    Die Tabelle tblKursteilnehmer (siehe Bild 6) verknüpft die Tabellen tblMitarbeiter und tblTermine und fungiert somit als Zwischentabelle für die n:m-Beziehung. Das Feld AngemeldetAm registriert das Anmeldedatum des Teilnehmers für den Kurs.

    Die Felder AbschlussID, Note und ZertifikatErhaltenAm werden nach Beendigung des Kurses ausgefüllt und erklären sich von selbst.

    Teilnahmenachweise

    Die Teilnahme an den einzelnen Kurseinheiten verwaltet die Tabelle tblTeilnahmenachweise (siehe Bild 7). Jeder Kurseinheit werden hier die Kursteilnehmer zugeordnet. Dazu kopiert die Anmelderoutine automatisch alle Teilnehmer in die Tabelle (s. Abschnitt 6.3). über das Feld WarAnwesend markieren Sie dann einfach, welcher Mitarbeiter teilgenommen hat.

    Bild 6: Datenfelder der Tabelle tblKursteilnehmer

    Bild 7: Datenfelder der Tabelle tblTeilnahmenachweise

    Praxis-Tipp

    Normalerweise würden die beiden Felder KursteilnehmerID und TermindetailID für die Zuordnung ausreichen. Alle Teilnehmer, die dann in der Tabelle zu einer Kurseinheit vorkommen, hätten auch teilgenommen. Mit dieser Technik wäre jedoch die Auswahl der Teilnehmer für den Anwender nicht sehr komfortabel. Deshalb gibt es zusätzlich das Feld WarAnwesend.

    Nachdem das Datenmodell ausführlich erläutert wurde, kommen wir zum Aufbau der Anwendung. Wir beginnen mit den Stammdaten für Mitarbeiter (siehe Bild 8).

    Bild 8: Das Mitarbeiterformular

    Das Formular enthält ein Register-Steuerelement. Auf der ersten Seite sind alle Datenfelder der Tabelle tblMitarbeiter aufgeführt.

    Die zweite Registerseite dient der Anzeige der Kurse, für die der Mitarbeiter angemeldet ist. In der Liste werden der Kursname, das Anmeldedatum, der erzielte Abschluss, die Note und das Ausstellungsdatum für das Zertifikat angezeigt. Das Unterformular ist schreibgeschützt, da änderungen an den Daten nur über die speziell für diese Funktion entworfenen Formulare erfolgen sollen (siehe Abschnitt 6-8).

    Mitarbeiter löschen

    Das Löschen eines Mitarbeiters erfolgt über die Schaltfläche btnLöschen. Legen Sie die folgende Ereignisprozedur für die Schaltfläche an:

    Private Sub btnLöschen_Click()
        DoCmd.RunCommand acCmdSaveRecord
        DoCmd.RunCommand acCmdDeleteRecord
        DoCmd.RunCommand _        acCmdRecordsGoToFirst
    End Sub

    Die Prozedur verwendet die RunCommand-Methode zum Löschen des Datensatzes und navigiert anschließend zum ersten Datensatz.

    Suchen nach Mitarbeitern

    Eine einfache Filterfunktion für Mitarbeiter können Sie über ein Textfeld realisieren. Nach Eingabe eines Suchbegriffs in das Feld soll das Formular nur noch die Datensätze anzeigen, bei denen der Suchbegriff im Vornamen oder Nachnamen enthalten ist.

    Legen Sie dazu das Textfeld txtFilter im Formular an und tragen Sie die folgende Prozedur beim Ereignis NachAktualisierung ein:

    Private Sub txtFilter_AfterUpdate()
      If Nz(Me!txtFilter, "") <> "" Then
        Me.Filter = "vorname like ""*" _      & Me!txtFilter _      & "*"" or Nachname like ""*" _      & Me!txtFilter & "*"""
        Me.FilterOn = True
      End If
    End Sub

    Die Prozedur prüft zunächst, ob ein Begriff eingegeben wurde, und setzt dann die Filtereigenschaft wie oben erwähnt. über die Methode FilterOn aktiviert sie den Filter im Formular.

    über die Schaltfläche btnFilteraufheben löschen Sie den Inhalt des Filterfeldes und deaktivieren den Filter:

    Private Sub btnFilteraufheben_Click()
        Me!txtFilter = ""
        Me.Filter = ""
        Me.FilterOn = False
    End Sub

    Die Eingabeformulare für die Kursleiter und Räume sind ebenfalls sehr einfach gehalten (siehe Bild 9).

    Beide Formulare enthalten jeweils die Datenfelder der entsprechenden Tabelle ohne den Primärschlüssel und zeigen die Daten in Form eines Datenblattes an. Dazu stellen Sie die Formulareigenschaft Standardansicht jeweils auf den Wert Datenblatt. Die Bildlaufleisten blenden Sie aus.

    Bild 9: Kursleiter und Räume eingeben

    Das soll für die hier benötigte Funktionsweise genügen, da die Daten nur in Nachschlagefeldern Verwendung finden.

    Eine Kernfunktion der Anwendung ist die Verwaltung und Erfassung der Kurse mit den einzelnen Terminen und Kurseinheiten.

    Bild 10: Verwaltung der Kurse

    Das Formular wirkt auf den ersten Blick sehr komplex (siehe Bild 12). Deshalb zerlegen wir die Funktionen in zwei Hauptbereiche. Der obere Bereich dient der Suche und Erfassung von Kursgruppen, während der untere Bereich die entsprechenden Kurse zu der aktuellen Kursgruppe anzeigt.

    Kursgruppen verwalten

    Das Hauptformular frmKursgruppen basiert auf der Tabelle tblKursgruppen und stellt lediglich das Feld Kursgruppe zur Eingabe bereit. Das Feld KursgruppeID ist deaktiviert und gesperrt. Die Datensatzmarkierer und Bildlaufleisten wurden entfernt und die Rahmenart des Formulars auf Dialog gesetzt.

    Löschen einer Kursgruppe

    Das Löschen einer Kursgruppe erfolgt über die Schaltfläche btnKursgruppeLöschen. Die Funktionalität ist mit derjenigen des Mitarbeiterformulars identisch.

    Kursgruppen anlegen

    Zur Anlage einer neuen Kursgruppe verwenden Sie einfach die Navigationsschaltflächen. Dabei müssen Sie aber darauf achten, bei einem neuen Datensatz im Hauptformular alles auszublenden, was die Erfassung der Kurse betrifft.

    Nur so können Sie kontrollieren, dass der Anwender nicht schon Kursdaten eingibt, obwohl er noch keine Kursgruppe angelegt hat.

    Um zu prüfen, ob es sich bei dem aktuellen um einen neuen Datensatz handelt, verwenden Sie die NewRecord-Eigenschaft des Formular-Objekts.

    Diese fragen Sie im Formularereignis BeimAnzeigen ab. Wenn die Eigenschaft den Wert Wahr hat, blenden Sie das Unterformular und die zugehörigen Schaltflächen aus:

    Private Sub Form_Current()
        If Me.NewRecord Then
            subKurse.Visible = False
            btnNeuerKurs.Visible = False
            btnKursLöschen.Visible = False
        Else
            subKurse.Visible = True
            btnNeuerKurs.Visible = True
            btnKursLöschen.Visible = True
        End If
    End Sub
    Private Sub Kursgruppe_AfterUpdate()
        If Me.NewRecord Then
            DoCmd.RunCommand acCmdSaveRecord
            Form_Current
            Me!cmbKursgruppen.Requery
        End If
    End Sub

    Quellcode 1

    Private Sub cmbKursgruppen_AfterUpdate()
        Dim rstKurse As Recordset
        Set rstKurse = Me.RecordsetClone
        rstKurse.FindFirst "KursgruppeID=" & cmbKursgruppen
        If Not rstKurse.NoMatch Then
            Me.Bookmark = rstKurse.Bookmark
        End If
    End Sub

    Quellcode 2

    Sub ShowOrHideMindestnote()
        Me!MindestNote.Visible = _        CBool(Nz(Me!AbschlussID.Column(2), False))
    End Sub

    Quellcode 3

    Nach der Anlage einer neuen Kursgruppe müssen Sie nur noch alles wieder einblenden. In dem vorliegenden Fall ist das einfach, da nur das Feld Kursgruppe ausgefüllt sein muss und es damit genügt, wenn Sie nach der Aktualisierung der Kursgruppe den Datensatz speichern und anschließend erneut die BeimAnzeigen-Prozedur des Formulars aufrufen, um alle versteckten Felder wieder einzublenden (s. Quellcode 1). Zum Schluss aktualisieren Sie noch das Kombinationsfeld zur Auswahl einer Kursgruppe. Schließlich ist dort ein Eintrag hinzugekommen.

    Kursgruppen suchen

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

    Testzugang

    eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel

    diesen und alle anderen Artikel mit dem Jahresabo

    Schreibe einen Kommentar