Warum noch ein Access-Buch?
Für wen ist das Buch?
Jetzt bestellen
+ direkter Download des eBooks!
Nur EUR 59,95!
Fehler gefunden?
Bitte melden!
Wünsche an das Buch?
Her damit!
Was denken die Leser über dieses Buch?
Lesen Sie aktuelle Rezensionen!
Kapitel des noch nicht veröffentlichten Buchs zum Downloaden, Probelesen und Kommentieren
Beispieldatenbanken
Zusätzliches Material

Das Buch im HTML-Format

Für unbestimmte Zeit bieten Addison-Wesley und André Minhorst den kompletten Inhalt des Buchs als Download an. Schauen Sie rein und informieren Sie sich über den Inhalt! Und wenn Ihnen das Buch nützlich erscheint und Sie glauben, dass Sie etwas gelernt haben oder durch das Gelesene sogar etwas Zeit und somit Geld bei Ihrer Arbeit einsparen konnten, können Sie sich ja beim Autor und beim Verlag revanchieren - beispielsweise durch den Kauf dieses Buchs.

Am schönsten wäre es natürlich, wenn Sie das Buch direkt hier bestellen - Sie erhalten das Buch dann direkt vom Verlag, und der Autor und Verlag haben dann noch mehr davon, als wenn Sie es anderswo kaufen.

Danke für Ihr Interesse!

15.8.3 Nachbildung relationaler Beziehungen per Auflistungsklasse

15.8.4 »Echtes« Objekt mit Auflistung

Die Auflistung des vorherigen Beispiels wurde durch ein abstraktes Objekt realisiert, in der Datenbank gibt es keine Objekte namens Personal. Es diente lediglich als Basis für die Auflistung AlleMitarbeiter. Im folgenden Beispiel erhält ein echtes Objekt eine Auflistung mit untergeordneten Objekten. Dazu greifen Sie das Mitarbeiter-Objekt aus dem vorherigen Beispiel auf und erweitern es um eine Auflistung der Abwesenheiten, die in der Tabelle tblAbwesenheiten gespeichert sind.

Die Klasse clsMitarbeiter ist nur geringfügig zu erweitern: Hier fügen Sie im Modulkopf lediglich die Deklaration des Auflistungsobjekts für die Abwesenheiten und zusätzlich die Property Get-Prozedur Abwesenheiten hinzu. Diese Property lädt beim ersten Aufruf der Collection Abwesenheiten aus einer aufrufenden Routine die Abwesenheitsdaten des aktuellen Mitarbeiters in die einzelnen Elemente der Auflistung. Diese stehen dann bei diesem und den folgenden Aufrufen weiter zur Verfügung, ohne dass Sie sie erneut laden müssen.

Dim mAbwesenheiten As Collection

Public Property Get Abwesenheiten() As Collection

    'Falls die Abwesenheiten-Auflistung noch nicht existiert ...
    If mAbwesenheiten Is Nothing Then

        'Neue Abwesenheiten-Auflistung erstellen
        Set mAbwesenheiten = New Collection
        Dim db As DAO.Database
        Dim rst As DAO.Recordset
        Dim objAbwesenheit As clsAbwesenheit
        Set db = CurrentDb

        'Datensatzgruppe aller Abwesenheiten zum aktuellen
        'Mitarbeiter öffnen
        Set rst = db.OpenRecordset("SELECT * FROM tblAbwesenheiten " _
            & "WHERE MitarbeiterID = " & mMitarbeiterID, dbOpenDynaset)

        'Alle Abwesenheiten durchlaufen
        Do While Not rst.EOF
            Set objAbwesenheit = New clsAbwesenheit
            'Abwesenheit in das Objekt laden
            objAbwesenheit.Laden rst!AbwesenheitID
            rst.MoveNext

            'Abwesenheit zur Auflistung hinzufügen
            mAbwesenheiten.Add objAbwesenheit
            Set objAbwesenheit = Nothing
        Loop

        Set rst = Nothing
        Set db = Nothing

    End If

    Set Abwesenheiten = mAbwesenheiten

End Property

Listing 15.33: Erweiterung der Klasse clsMitarbeiter aus Listing 16.30

Die Klasse cls Abwesenheiten

Fehlt nur noch die Klasse, die als Basis für die Abwesenheits-Objekte dient. Diese ist ähnlich wie die Klasse clsMitarbeiter aufgebaut - sie hat ein paar Eigenschaften mit den entsprechenden Property Let- und Property Get-Prozeduren und eine Methode zum Laden der Daten einer Abwesenheit in das Objekt.

Private mAbwesenheitID As Long
Private mAbwesenheitsart As String
Private mStartdatum As Date
Private mEnddatum As Date

Public Property Get AbwesenheitID() As Long
    AbwesenheitID = mAbwesenheitID
End Property

Public Property Let AbwesenheitID(lngAbwesenheitID As Long)
    mAbwesenheitID = lngAbwesenheitID
End Property

Public Property Get Abwesenheitsart() As String
    Abwesenheitsart = mAbwesenheitsart
End Property

Public Property Let Abwesenheitsart(strAbwesenheitsart As String)
    mAbwesenheitsart = strAbwesenheitsart
End Property

Public Property Get Startdatum() As Date
    Startdatum = mStartdatum
End Property

Public Property Let Startdatum(datStartdatum As Date)
    mStartdatum = datStartdatum
End Property

Public Property Get Enddatum() As Date
    Enddatum = mEnddatum
End Property

Public Property Let Enddatum(datEnddatum As Date)
    mEnddatum = datEnddatum
End Property

Public Function Laden(lngAbwesenheitID As Long) As Boolean

    Dim db As DAO.Database
    Dim rst As DAO.Recordset

    Set db = CurrentDb

    'ID der Abwesenheit zuweisen
    mAbwesenheitID = lngAbwesenheitID

    'Datensatz mit der angegebenen AbwesenheitID öffnen
    '(enthält Mitarbeiterdaten und Abteilung)

    Set rst = db.OpenRecordset("SELECT tblAbwesenheiten.*, " _
        & "tblAbwesenheitsarten.Abwesenheitsart FROM tblAbwesenheiten " _
        & "INNER JOIN tblAbwesenheitsarten ON " _
        & "tblAbwesenheiten.AbwesenheitsartID = " _
        & "tblAbwesenheitsarten.AbwesenheitsartID " _
        & "WHERE AbwesenheitID = " & mAbwesenheitID, dbOpenDynaset)

    'Falls Datensatz vorhanden, Eigenschaften zuweisen
    If Not rst.EOF Then
        mAbwesenheitID = rst!AbwesenheitID
        mAbwesenheitsart = rst!Abwesenheitsart
        mStartdatum = rst!Startdatum
        mEnddatum = rst!Enddatum
        Laden = True
    End If

    Set rst = Nothing
    Set db = Nothing

End Function

Listing 15.34: Inhalt des Klassenmoduls clsAbwesenheiten

Was tun mit Mitarbeiter- und Abwesenheits-Objekten?

Einige Abschnitte weiter oben haben Sie zunächst eine Routine kennen gelernt, die komfortabel über Objekte und ihre Auflistungen zugreift und dann die notwendigen Klassen clsPersonal und clsMitarbeiter erstellt. Mit der hinzugekommenen Klasse clsAbwesenheiten können Sie nun die Klasse clsMitarbeiter als Objekt mit einer Abwesenheiten-Collection verwenden. Das folgende Listing zeigt eine Beispielanwendung, in der zu einem Mitarbeiter alle vorhandenen Abwesenheiten ausgegeben werden.

Durch die sorgfältigen Vorbereitungen - hier dem Erstellen der zugrunde liegenden Klassen - sind hier nur noch wenige Zeilen Code notwendig, um die Informationen von mehreren Tabellen auszugeben.

Public Function MitarbeiterUndAbwesenheitenAusgeben(lngMitarbeiterID _
    As Long)

    Dim Mitarbeiter As clsMitarbeiter
    Dim Abwesenheit As clsAbwesenheit
    Dim i As Integer

    Set Mitarbeiter = New clsMitarbeiter

    If Mitarbeiter.Laden(lngMitarbeiterID) = True Then
        Debug.Print "Vorname: " & Mitarbeiter.Vorname
        Debug.Print "Nachname: " & Mitarbeiter.Nachname
        Debug.Print "Abteilung: " & Mitarbeiter.Abteilung
        For Each Abwesenheit In Mitarbeiter.Abwesenheiten
            With Abwesenheit
                Debug.Print "================"
                Debug.Print .Abwesenheitsart
                Debug.Print .Startdatum & " - " & .Enddatum
            End With
        Next Abwesenheit
    End If

    Set Mitarbeiter = Nothing

End Function

Listing 15.35: Ausgabe der Mitarbeiter und ihrer Abwesenheiten

Nächster Abschnitt:

15.9 Schnittstellen und Vererbung

© 2006-2008 André Minhorst Alle Rechte vorbehalten.