Im vorigen Artikel haben wir ein Hauptformular mit einem Unterformular in der Datenblattansicht erstellt. Neue Datensätze wurden direkt in der Datenblattzeile angelegt. Das funktioniert gut für einfache Tabellen, stößt aber schnell an Grenzen, wenn viele Felder zu füllen sind oder Nachschlagefelder und Anlagefelder übersichtlich dargestellt werden sollen. In diesem Artikel erweitern wir das Formular um ein modales Detailformular, das alle Felder der Tabelle tblBuecher komfortabel in der normalen Formularansicht anzeigt.
Beispieldatenbank
Die Beispiele dieses Artikels findest Du in der Datenbank FormularBasics_DetailformOeffnenUndAuswerten.accdb.
Das Konzept
In diesem Artikel fügen wir dem Beispiel aus dem Artikel Formulare [basics]: Datenblattansicht effizient nutzen (www.access-basics.de/715) ein Detailformular hinzu, mit dem neue Datensätze angefügt und vorhandene Datensätze bearbeitet werden können.
Das Detailformular wird modal geöffnet, das heißt, der Benutzer kann erst dann mit dem aufrufenden Formular weiterarbeiten, wenn er das Detailformular geschlossen oder ausgeblendet hat. Das Detailformular enthält zwei Schaltflächen: OK und Abbrechen.
Ein Klick auf OK blendet das Detailformular lediglich aus, anstatt es zu schließen. Dadurch läuft der Code im aufrufenden Formular weiter, der das Unterformular aktualisiert und den neu angelegten Datensatz markiert. Anschließend schließt der aufrufende Code das Detailformular endgültig.
Ein Klick auf Abbrechen verwirft den neuen Datensatz und schließt das Detailformular. Der aufrufende Code erkennt, dass das Formular geschlossen wurde, und verzichtet auf die Aktualisierung des Unterformulars.
Um zu unterscheiden, ob der Benutzer OK oder Abbrechen geklickt hat, verwenden wir eine öffentliche Variable blnOK im Klassenmodul des Detailformulars. Ob das Formular überhaupt noch geöffnet ist, prüfen wir mit der Hilfsfunktion IstFormularGeoeffnet.
Die Hilfsfunktion IstFormularGeoeffnet
Die Funktion IstFormularGeoeffnet prüft über SysCmd, ob ein Formular mit dem angegebenen Namen aktuell geöffnet ist. Wir legen ein allgemeines Modul mdlTools an und fügen dort folgende Funktion ein:
Public Function IstFormularGeoeffnet( _ strFormularname As String) _ As Boolean If SysCmd(acSysCmdGetObjectState, _ acForm, strFormularname) > 0 Then IstFormularGeoeffnet = True End If End Function
SysCmd gibt mit dem Parameter acSysCmdGetObjectState den Zustand des angegebenen Objekts zurück. Ein Rückgabewert größer als 0 bedeutet, dass das Formular geöffnet ist – gleichgültig, ob es sichtbar ist oder nicht.
Unser exklusives Angebot für Dich!
(Das Abo ist jederzeit monatlich kündbar)
Hier geht’s weiter →Die ersten 4 Wochen kostenlos testen – voller Zugriff auf alle Artikel, vollständigen Code und Beispieldatenbanken. Kein Risiko: Wenn es nicht passt, kündigst Du einfach innerhalb der ersten vier Wochen.
Oder hast Du eine konkrete Frage zu Deiner eigenen Access-Anwendung?
Vielleicht stellt Deine Anwendung Dich vor eine Herausforderung, zu der Du bisher keine Lösung findest. Schlechte Performance, kein ausreichender Zugriffsschutz, Du bist unsicher über Dein Datenmodell oder Dein Code liefert unerklärliche Fehler?
In unserem kostenlosen Access-Audit schaut sich André Minhorst persönlich gemeinsam mit Dir Deine Lösung per Zoom an – und zeigt Dir, wo Datenmodell, VBA-Code, Ergonomie und Sicherheit Optimierungspotenzial bieten.
Jetzt kostenloses Access-Audit anfordern →![Access [basics]](https://access-basics.de/wp-content/uploads/2021/02/logo400.png)