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!

5.10.8 Daten aus verknüpften Tabellen anzeigen

5.10.9 Reflexive Daten im TreeView-Steuerelement

Die Tabelle tblPersonal der Beispieldatenbank liefert ein gutes Beispiel für eine reflexive Beziehung. Einige Datensätze sind über das Feld Vorgesetzter mit Feldern der gleichen Tabelle verknüpft und liefern damit Informationen über die Hierarchie der Mitarbeiter.

Diese lässt sich natürlich in einem TreeView-Steuerelement weitaus besser veranschaulichen als in einer Tabelle (siehe Abbildung 5.29).

Abbildung 5.29: Mitarbeiter und ihre Untergebenen

Für das Füllen des TreeView-Steuerelements mit Daten aus einer reflexiven Beziehung ist eine rekursive Funktion erforderlich, das heißt, dass eine Funktion sich entsprechend der Hierarchie immer wieder selbst aufruft und dabei untergeordnete Objekte abarbeitet, bis schließlich alle Daten berücksichtigt wurden.

Das folgende Listing zeigt die für diesen Fall notwendigen Routinen. Die Beim Laden-Ereignisprozedur leert das TreeView-Steuerelement und ruft zum ersten Mal die Routine TreeViewRekursivFuellen auf. Der einzige Parameter der Routine erhält hier den Wert 0.

Private Sub Form_Load()
    objTreeView.Nodes.Clear
    TreeViewRekursivFuellen 0
End Sub

Private Sub TreeViewRekursivFuellen(lngPersonalID As Long)
    Dim db As DAO.Database
    Dim rst As DAO.Recordset2
    Dim objNode As MSComctlLib.Node
    Set db = CurrentDb
    If lngPersonalID = 0 Then
        Set rst = db.OpenRecordset("SELECT * FROM tblPersonal " _
            & "WHERE Vorgesetzter IS NULL")
    Else
        Set rst = db.OpenRecordset("SELECT * FROM tblPersonal " _
         & "WHERE Vorgesetzter = " & lngPersonalID)
    End If
    Do While Not rst.EOF
        If lngPersonalID = 0 Then
            Set objNode = objTreeView.Nodes.Add(, , "Personal" _
                & rst!PersonalID, rst!Vorname & " " & rst!Nachname)
        Else
            Set objNode = objTreeView.Nodes.Add("Personal" _
                & lngPersonalID, tvwChild, "Personal" & rst!PersonalID, _
                rst!Vorname & " " & rst!Nachname)
        End If
        TreeViewRekursivFuellen rst!PersonalID
        rst.MoveNext
    Loop
    Set objNode = Nothing
    rst.Close
    Set rst = Nothing
    Set db = Nothing
End Sub

Listing 5.14: Füllen eines TreeView-Steuerelements mit einer rekursiven Funktion

Beim ersten Aufruf erzeugt die Routine TreeViewRekursivFuellen eine Datensatzgruppe, die alle Mitarbeiter ohne Vorgesetzten enthält. Dafür sorgt der Parameter lngPersonalID; hat dieser den Wert 0, wird die entsprechende SELECT-Abfrage ausgeführt.

Die Routine legt dann zunächst einen Knoten für den ersten Mitarbeiter an (für lngPersonalNr = 0 ohne Referenz auf bestehende Knoten) und ruft sich selbst dann mit einem anderen Wert für den Parameter lngPersonalID auf - nämlich der Personalnummer des soeben angelegten Mitarbeiters.

Diesmal prüft die Routine, ob es Mitarbeiter gibt, die dem Mitarbeiter mit der übergebenen Personalnummer untergeordnet sind. Ist das der Fall, werden diese ebenfalls angelegt. Dabei wird allerdings eine Referenz auf das übergeordnete Mitarbeiter-Element erzeugt. Anschließend wird die Routine erneut mit der aktuellen Personalnummer aufgerufen - dieser Vorgang wiederholt sich, bis es keine weiteren untergeordneten Mitarbeiter mehr gibt. In diesem Fall arbeitet die aufrufende Instanz der Routine TreeViewRekursivFuellen die übrigen Datensätze der Datensatzgruppe rst weiter ab.

Nächster Abschnitt:

5.10.10 TreeView füllen bei großen Datenbeständen

© 2006-2008 André Minhorst Alle Rechte vorbehalten.