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.10 TreeView füllen bei großen Datenbeständen

5.10.11 Elemente erst bei Bedarf anlegen

Wenn der Aufbau des Baumes definitiv zu lange dauert, könnte man auch dafür sorgen, dass nicht sichtbare oder untergeordnete Knoten erst bei Verwendung nachgeladen werden. Diese Variante finden Sie im Formular frmTreeViewFuellen1_n_BeiBedarf. Die enthaltene Funktionalität entspricht prinzipiell der aus dem Formular frmTreeViewFuellen1_n mit dem Unterschied, dass der Teil, in dem die Routine die Bestellungen zu einem Kunden im TreeView-Steuerelement anlegt, in eine weitere Ereignisprozedur ausgelagert wurde. Diese heißt NodeClick und wird beim Klicken auf ein Element ausgelöst.

Die Ereignisprozedur Form_Load füllt das TreeView-Steuerelement zunächst mit allen Kunden:

Private Sub Form_Load(Cancel As Integer)
    Dim db As DAO.Database
    Dim rstKunden As DAO.Recordset2
    Dim rstBestellungen As DAO.Recordset2
    Dim objNode As MSComctlLib.Node
    Set db = CurrentDb
    Set rstKunden = db.OpenRecordset("tblKunden")
    objTreeView.Nodes.Clear
    Do While Not rstKunden.EOF
        Set objNode = objTreeView.Nodes.Add(, , "Kunde" _
            & rstKunden!KundeID, rstKunden!Firma)
        rstKunden.MoveNext
    Loop
    Set objNode = Nothing
    rstKunden.Close
    Set rstKunden = Nothing
    Set db = Nothing
End Sub

Listing 5.16: Einlesen der Kunden ohne Bestelldaten

Die per Klick auf einen Kunden ausgelöste NodeClick-Prozedur besitzt einen Parameter, der einen Objektverweis auf das angeklickte Element liefert. Die Eigenschaft Children dieses Objekts enthält die Anzahl der Child-Elemente des angeklickten Elements. Ist diese gleich 0, wurden die Bestellungen zu diesem Kunden noch nicht eingelesen - Zeit, dies nachzuholen. Mit der Key-Eigenschaft des Node-Objekts, die beispielsweise den Wert Kunde7 enthält, können Sie per Replace schnell die Kunden-ID ermitteln. Mit dieser öffnen Sie ein Recordset mit allen Bestellungen zu dem angeklickten Kunden und fügen die Bestellung-Elemente zum Baum hinzu:

Private Sub tvwKundenUndBestellungen_NodeClick(ByVal Node As Object)
    Dim objNode As MSComctlLib.Node
    Dim rstBestellungen As DAO.Recordset2
    Dim db As DAO.Database
    Dim lngKundeID As Variant
    Set objNode = Node
    If objNode.Children = 0 Then
        Set db = CurrentDb
        lngKundeID = Replace(objNode.Key, "Kunde", "")

        If Len(lngKundeID) > 8 Then Exit Sub
        Set rstBestellungen = db.OpenRecordset("SELECT BestellungID, " _
            & "Bestelldatum FROM tblBestellungen WHERE KundeID = " _
            & lngKundeID, dbOpenDynaset)
        Do While Not rstBestellungen.EOF
            objTreeView.Nodes.Add "Kunde" & lngKundeID, tvwChild, _
                "Bestellung" & rstBestellungen!BestellungID, _
                rstBestellungen!BestellungID & "/" _
                & rstBestellungen!Bestelldatum
            rstBestellungen.MoveNext
        Loop
        rstBestellungen.Close
        Set rstBestellungen = Nothing
        Set db = Nothing
    End If
    Set objNode = Nothing
End Sub

Listing 5.17: Diese Routine liest die Bestelldaten zu einem mit der Maus angeklickten Kunden-Element im TreeView-Element ein

Nächster Abschnitt:

5.10.12 Neuzeichnen des Baumes verhindern

© 2006-2008 André Minhorst Alle Rechte vorbehalten.