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 4/2003.

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

Schulungen und Kurse verwalten (Teil 2)

Mit den Anleitungen des ersten Teils dieses Beitrags aus der letzten Ausgabe können Sie eine Schulungsverwaltung erstellen, mit der Schulungsprogramme sowie die angemeldeten Teilnehmer und deren Abschlüsse verwaltet werden. In dieser Ausgabe lernen Sie, wie Sie die Software um eine Raum- und Kursleiterplanung erweitern können. Außerdem erfahren Sie, wie Sie ein Auswahlformular zum Druck von Stunden- und Raumbelegungsplänen entwerfen können.

Raum- und Kursleiterplanung

In der bisherigen Version der Kursverwaltung können Sie zu jedem Kurs mehrere Starttermine jeweils mit einem Kursleiter und einer Raumnummer angeben. Pro Termin lassen sich dabei mehrere Kurseinheiten mit Start- und Enddatum erfassen (s. Abb. 1).

Abb. 1: Alte Version der Kursverwaltung

Mit dieser Variante haben Sie programmtechnisch aber nicht die Möglichkeit zu prüfen, ob für eine angegebene Kurseinheit der gewählte Raum bzw. Kursleiter frei ist.

Folglich kann es passieren, dass Räume doppelt belegt werden oder Kursleiter zwei Kurse gleichzeitig halten müssten.

Anpassung der Datenstruktur

Um einen Prüfmechanismus einbauen zu können, ergänzen Sie die Datenstruktur so, dass zusätzlich zu jeder in der Tabelle tblTermindetails gespeicherten Kurseinheit der Raum und der Kursleiter gespeichert werden.

Fügen Sie dazu in der Tabelle tblTermindetails die Felder RaumID und KursleiterID ein.

Verknüpfen Sie anschließend die Felder mit den entsprechenden Primärschlüsseln der Tabellen tblRaeume und tblKursleiter unter Verwendung der referenziellen Integrität.

Abb. 2 zeigt die neue Datenstruktur für den entsprechenden Teilbereich.

Das neue Formular
frmTermineBearbeiten

Abb. 2: Neue Datenstruktur für die Kursverwaltung

Abb. 3: Das neue Formular frmTermineBearbeiten

Im nächsten Schritt passen Sie zunächst das Unterformular frmTerminDetails an. Fügen Sie dazu die zwei Kombinationsfelder KursleiterID und RaumID ein, über die die Auswahl des Kursleiters und des Raumes zu einer Kurseinheit erfolgt.

Praxis-Tipp

Am einfachsten erstellen Sie die Kombinationsfelder, indem Sie diese aus dem Formular frmTermineBearbeiten kopieren. Die Kombinationsfelder sind absolut identisch und das Anlegen ist mit nur zwei Mausklicks erledigt. (

Nun ordnen Sie die Steuerelemente im Formular frmTermineBearbeiten noch neu an. Verbreitern Sie das Unterformular-Steuerelement, damit die neuen Felder in der Liste sichtbar sind, und platzieren Sie die Schaltflächen unterhalb der Liste. Das neue Formular könnte wie in Abb. 3 gezeigt aussehen.

Verfügbarkeit prüfen

Die Verfügbarkeit eines Raumes oder Kursleiters kann jetzt für jede Kurseinheit separat geprüft werden. Die Überprüfung erfolgt an zwei Stellen: zum einen in der Prozedur TermindetailsAnlegen, die über die Schaltfläche Einheiten anlegen aufgerufen wird und in einem Schritt mehrere Kurseinheiten einfügt; zum anderen nach der manuellen Änderung von Werten direkt in den Kombinationsfeldern für den Raum und den Kursleiter.

Hinweis

Die Prüfmechanismen werden im Folgenden nur noch für Räume beschrieben, da sie mit denen für Kursleiter identisch sind. Dabei muss lediglich das Feld RaumID durch das Feld KursleiterID ersetzt werden. (

Der Prüfmechanismus

Die eigentliche Verfügbarkeitsprüfung erfolgt über die Funktion IstRaumVerfügbar (s. Quellcode 1). Der Funktion werden die Raumnummer und der zu prüfende Zeitraum mit Start- und Enddatum übergeben.

Public Function IstRaumVerfügbar(RaumID, Startdatum, Enddatum) As Boolean

    Dim WhereKlausel As String

    If IsNull(Startdatum) Or IsNull(Enddatum) Then

        IstRaumVerfügbar = False

    Else

        WhereKlausel = "RaumID = " & Nz(RaumID, 0) _

            & " AND ((" & SQLDatum(Startdatum) _
            & " Between DateAdd(""s"",1,[Startdatum]) " _
            & "And DateAdd(""s"",-1,[Enddatum]))" _

            & " OR (" & SQLDatum(Enddatum) & " Between " _
            & "DateAdd(""s"",1,[Startdatum]) And DateAdd(""s"",-1,[Enddatum]))" _
            & " OR (" & SQLDatum(Startdatum) & "=[Startdatum])" _

            & " OR (" & SQLDatum(Enddatum) & "=[Enddatum]))"

        If IsNull(DLookup("TermindetailID", "tblTermindetails", WhereKlausel)) Then

            IstRaumVerfügbar = True

        Else

            IstRaumVerfügbar = False

        End If

    End If

End Function

Quellcode 1

Die Besonderheit liegt bei der Datumsbetrachtung. Die Prozedur schaut in der Tabelle tblTermindetails nach, ob das zu prüfende Start- bzw. Enddatum für die angegebene Raumnummer bereits innerhalb eines anderen in der Tabelle gespeicherten Zeitraums liegt. Der folgende Ausdruck dient dabei (exemplarisch für das Startdatum) als Bedingung:

SQLDatum(Startdatum) & " Between DateAdd("s",1,[Startdatum]) And DateAdd("s",-1,[Enddatum])"

In der Bedingung werden nicht die exakten Datumswerte geprüft, da sonst ein Kurs, der um 14:00 Uhr endet, mit einem zu prüfenden Kurs, der um 14:00 Uhr beginnt, zusammenfallen würde.

Die Abfrage würde dann als Ergebnis liefern, dass um 14:00 Uhr bereits ein Kurs vorhanden ist. Um das zu vermeiden, wird beim Startdatum eine Sekunde addiert und beim Enddatum eine Sekunde subtrahiert.

Folglich würde der Kurs, der um 14:00 Uhr endet, mit dem Wert 13:59:59 Uhr geprüft.

Hinweis

Alternativ zur DateAdd-Funktion können Sie auch mit Größer- und Kleiner-Zeichen arbeiten. Die Bedingung sähe dann wie folgt aus:

Hinweis

SQLDatum(Startdatum) & ">Startdatum And " & SQLDatum(Startdatum) & "<Enddatum" (

Ferner prüft die gesamte Bedingung, ob Start- oder Enddatum für den Raum schon vorhanden sind. Diese Fälle müssen ebenfalls ausgeschlossen werden.

Liefert die Gesamtbedingung für die Tabelle tblTermindetails keine Ergebnisse zurück, dann ist der Raum verfügbar.

Einbau in die Funktion TermindetailsAnlegen

Die Funktion IstRaumVerfügbar kann jetzt beim Anlegen von Kurseinheiten mittels der Funktion TermindetailsAnlegen eingesetzt werden. Über die Abfrage aus Quellcode 2 wird zunächst die Raumnummer ermittelt, die beim Anlegen einer neuen Kurseinheit verwendet werden soll.

If IstRaumVerfügbar(RaumID, MyStartdatum, MyEnddatum) = False Then

    MyRaumID = "Null"

    RaumErrorstring = RaumErrorstring & MyStartdatum & " - " & MyEnddatum & vbCrLf

Else

    MyRaumID = RaumID

End If

Quellcode 2

Errorstring = ""

If RaumErrorstring <> "" Then

    Errorstring = Errorstring & "Bei den folgenden Kursentermine konnte kein " & _

    "Raum angelegt werden, da der vorgegebene Raum bereits belegt war:"

    Errorstring = Errorstring & vbCrLf & vbCrLf & RaumErrorstring & vbCrLf & vbCrLf

End If

If KursleiterErrorstring <> "" Then

    Errorstring = Errorstring & "Bei den folgenden Kursentermine konnte kein " & _

    "Kursleiter angelegt werden, da der vorgegebene Kursleiter bereits einen " & _
    "anderen Kurs hat:"

    Errorstring = Errorstring & vbCrLf & vbCrLf & KursleiterErrorstring

End If

If Errorstring <> "" Then

    MsgBox Errorstring, vbOKOnly + vbExclamation, "Fehler..."

End If

Quellcode 3

Wenn der Raum verfügbar ist, wird die RaumID verwendet, die bei den Termindaten als Standard definiert wurde. Im anderen Fall setzt die Prozedur den Wert auf Null. Der Raum wird also freigelassen. Außerdem merkt sich die Prozedur den geprüften Zeitraum in der Variablen RaumErrorstring, um dem Anwender nach Anlage aller Kurseinheiten eine Übersicht über die Kurse zu geben, für die der Standardraum nicht festgelegt werden konnte.

Diese Meldung wird wie folgt zusammengesetzt und zeigt zusätzlich die Kursleiter an, die nicht eingefügt werden konnten (s. Quellcode 3).

Abb. 4: Fehlermeldung beim automatischen Anlegen von Kurseinheiten

Abb. 4 zeigt eine solche Fehlermeldung. Dabei wurden die Kurseinheiten einfach doppelt angelegt, ohne die schon bestehenden vorher zu löschen.

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.