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!

16.2.5 Neue Formularinstanz erzeugen und zur Collection hinzufügen

16.2.6 Schließen aller Instanzen des Formulars

Letztere Aufgabe ist offensichtlich schneller erledigt: Wenn Sie sich einer Instanz eines Formulars durch Leeren der Objektvariablen entledigen können, dann lassen sich durch die gleiche Vorgehensweise mit der Collection, die alle Objektvariablen enthält, vermutlich auch alle Formulare schließen:

Private Sub cmdAlleSchliessen_Click()
    Set colForms = Nothing
End Sub

Listing 16.25: Schließen aller Formularinstanzen durch Leeren der kompletten Sammlung

Das funktioniert auch - solange sich keines der Formulare wehrt. Formulare zur Datenbearbeitung besitzen in der Regel Mechanismen zum Validieren der enthaltenen Daten. Das Formular frmKontaktdetail könnte etwa folgende Prozedur zum Überprüfen des Vornamens besitzen:

Private Sub Form_BeforeUpdate(Cancel As Integer)

    If Nz(Me!Vorname, "") = "" Then
        MsgBox "Bitte geben Sie einen Vorname ein."
        Me!Vorname.SetFocus
        Cancel = True
        Exit Sub
    End If

End Sub

Listing 16.26: Validierung eines Formularfeldes

Wenn Sie nun den Vornamen in einer Instanz des Formulars frmKontaktdetails leeren und dann mit der Prozedur aus Listing 16.27 schließen möchten, zeigt Access zwar die für diesen Fall vorbereitete Meldung an, schließt aber anschließend das Formular, ohne dem Benutzer Gelegenheit zum Korrigieren der Eingabe zu geben - und ohne irgendeine Änderung in diesem Formular zu übernehmen.

Die folgende Prozedur ist zwar wesentlich umfangreicher als der Vorschlag aus Listing 16.25, dafür lässt sie Formulare, deren Inhalt »dirty«, also seit dem letzten Speichern verändert ist, außen vor und schließt nur die übrigen Formulare, indem sie diese aus der Collection colForms entfernt.

Wenn die Collection nach dem kollektiven Schließen noch Elemente enthält und dementsprechend noch ein oder mehrere Formulare geöffnet sind, gibt die Prozedur eine Meldung aus.

Private Sub cmdAlleSchliessen_Click()

    Dim intFormCount As Integer
    Dim i As Integer
    Dim frm As Form_frmKontaktdetails

    'Anzahl der Instanzen ermitteln
    intFormCount = colForms.Count
    'Alle Instanzen durchlaufen - rückwärts wegen Löschvorgang
    For i = intFormCount To 1 Step -1
        'Aktuelles Element per Objektvariable referenzieren
        Set frm = colForms.Item(i)
        'Prüfen, ob Datensatz gespeichert ist
        If frm.Dirty = False Then
            'Falls gespeichert: Aus Collection entfernen.
            colForms.Remove i
        End If
    Next i

    'Anzahl der Instanzen erneut ermitteln
    intFormCount = colForms.Count

    'Wenn noch Instanzen vorhanden sind, Meldung ausgeben
    If intFormCount = 0 Then
        Set colForms = Nothing
    Else
        MsgBox "Es konnten nicht alle Formulare mit " _
            & "Kontaktdetails geschlossen werden."
    End If
End Sub

Listing 16.27: Schließen aller Instanzen

Nächster Abschnitt:

16.2.7 Schließen einer bestimmten Instanz

© 2006-2008 André Minhorst Alle Rechte vorbehalten.