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.1 Auflistungen selbst gemacht

15.8.2 Benutzerdefinierte Auflistungsklassen

Eine benutzerdefinierte Auflistungsklasse kapselt das Collection-Objekt und erweitert dieses um ein beziehungsweise zwei Features (eines davon funktioniert unter Access 2003 und 2007, aber nicht mit älteren Versionen von Access).

Nachfolgend finden Sie das Listing der kompletten Auflistungsklasse, die - relativ sinnfrei - Namen in der Auflistung speichert, ausgibt, löscht und die Anzahl der enthaltenen Einträge ermittelt.

Eingebaute Auflistungen lassen sich per For Each-Schleife durchlaufen; außerdem kann man auf eine Standard-Eigenschaft zugreifen und damit Bezüge abkürzen - etwa DBEngine(0) statt DBEngine.Workspaces(0).

Ersteres klappt mit dem Collection-Objekt unter Access ab Version 2003 (VBA 6.4), Letzteres selbst unter Access 2007 nicht. Für beide liefert die folgende Variante mit ein paar Tricks nach:

Private mNamen As Collection

Private Sub Class_Initialize()
    Set mNamen = New Collection
End Sub

Private Sub Class_Terminate()
    Set mNamen = Nothing
End Sub

'Default-Property:
Property Get Item(Index As Long) As String
    'Attribute Item.VB_UserMemId = 0
    Item = mNamen(Index)
End Property

Property Get Count() As Long
    Count = mNamen.Count
End Property

Function AddItem(AName As String) As Long
    mNamen.Add AName
    AddItem = Count
End Function

Sub Remove(Index As Long)
    mNamen.Remove Index
End Sub

'Enumeration der Collection nach außen ermöglichen:
Property Get NewEnum() As IUnknown
    'Attribute Enumerate.VB_UserMemId = -4
    Set NewEnum = mNamen.[_NewEnum]
End Property

Listing 15.28: Klassenmodul einer Auflistungsklasse

Damit die genannten Features unter Access ab Version 2000 funktionieren, sind folgende Schritte notwendig:

  • Exportieren Sie die Klasse in eine .cls-Datei.
  • Löschen Sie die Klasse aus dem VBA-Projekt.
  • Entfernen Sie in der exportierten Datei die Kommentarzeichen vor den beiden fett gedruckten Zeilen.
  • Importieren Sie die Klasse wieder.
  • Die beiden ehemals auskommentierten Zeilen sind nun nicht mehr sichtbar. Es handelt sich dabei um verborgene Eigenschaften, die aber durchaus ihren Zweck erfüllen. Das können Sie mit der folgenden Prozedur nachweisen:

    Public Sub BeispielCollection()

        Dim objNamen As New clsNamenTest
        Dim varName As Variant

        With objNamen
            .AddItem "Trowitzsch"
            .AddItem "André"
            .AddItem "Minhorst"
            .AddItem "Addison-Wesley"
            Debug.Print "Gespeichert sind " & .Count & " Einträge:"
            For Each varName In objNamen
                Debug.Print varName
            Next varName
        End With

        Debug.Print "Der erste Eintrag war: " & objNamen(1)

        Set objNamen = Nothing

    End Sub

    Listing 15.29: Test der benutzerdefinierten Auflistungsklasse mit Enumeration und Standardeigenschaft

    Nächster Abschnitt:

    15.8.3 Nachbildung relationaler Beziehungen per Auflistungsklasse

    © 2006-2008 André Minhorst Alle Rechte vorbehalten.