Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 2/2009.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

Zusammenfassung

Lernen Sie Tipps und Tricks kennen, um sich den Programmieralltag zu erleichtern.

Techniken

DoCmd.Close, Dateien schreiben, Kontestmenüs ermitteln

Voraussetzungen

Access 2000 oder höher

Beispieldateien

-

Shortlink

652

Tipps und Tricks

André Minhorst, Duisburg

Es sind die kleinen Kniffe, die uns den Alltag beim Programmieren von Access-Anwendungen erleichtern. In dieser Ausgabe von Access im Unternehmen zeigen wir Ihnen zum Beispiel, wie Sie den Datensatzwechsel in Formularen steuern, bei Problemen mit DoCmd.OpenForms reagieren, oder einen kompletten Datensatz im Endlosformular markieren.

DoCmd.Close und seine Tücken

Die Anweisung DoCmd.Close schließt ohne Parameter das aktuelle Objekt, und mit den beiden Parametern ObjectType und ObjectName, für die man den Objekttyp (meist acForm oder acReport) und den Objektnamen (etwa frmBeispiel oder rptBeispiel) eingibt, beendet es die Anzeige des angegebenen Objekts.

Die in der Überschrift erwähnte Tücke bezieht sich ausschließlich auf Formulare, die an eine Datenherkunft, wie eine Tabelle oder eine Abfrage, gebunden sind. Dort sorgt das Schließen eines Formulars per DoCmd.Close für das Speichern des aktuellen Datensatzes.

Aber leider nicht immer, so zum Beispiel bei Datensätzen, denen Sie einen bereits vorhandenen Wert für ein Feld mit eindeutigem Index hinzugefügt haben. Die passende Tabelle sieht im Entwurf samt Indizes wie in Abb. 1 aus. Die Fehlermeldung, die beim zweimaligen Wert des gleichen Datensatzes im eindeutigen Feld Beispielfeld auftaucht, hat die Fehlernummer 3022 und besagt, dass man versucht, einen Wert hinzuzufügen, nachdem ein Index, ein Primärschlüssel oder eine Beziehung doppelte Werte enthalten würde.

pic001.tif

Abb. 1: Eindeutiger Index eines Tabellenfelds

Erstellen Sie nun ein Formular, das die beiden Felder der Beispieltabelle und eine Schaltfläche mit dem Namen cmdOK enthält (s. Abb. 2), und legen Sie die folgende Ereignisprozedur für diese Schaltfläche an:

pic002.tif

Abb. 2: Formular zum Testen des Verhaltens von DoCmd.Close

Private Sub cmdOK_Click()

    DoCmd.Close acForm, Me.Name

    End Sub

Geben Sie in den ersten Datensatz einen Wert für das Feld Beispielfeld ein und klicken Sie auf OK. Wenn Sie in der Tabelle tblBeispiel nachsehen, finden Sie den neu angelegten Datensatz dort vor. Öffnen Sie das Formular erneut, wechseln Sie zum zweiten Datensatz und geben Sie den gleichen Wert wie zuvor in das Feld Beispielfeld ein.

Klicken Sie auf OK, ohne vorher den Datensatz per Klick auf den Datensatzmarkierer oder durch Wechseln zu einem anderen Datensatz zu speichern. Die erste Überraschung: Es erscheint keine Fehlermeldung. Die zweite Überraschung: Ein Blick in die Tabelle tblBeispiel zeigt, dass der Datensatz kommentarlos überhaupt nicht angelegt wurde.

Ein Blick in die Online-Hilfe der Close-Methode zeigt, dass dieses Verhalten zumindest nicht dokumentiert ist: Dort ist lediglich die Rede davon, dass Felder, für die Sie die Required-Eigenschaft auf True eingestellt haben, für einen kommentarlosen Abbruch des Speichervorgangs sorgen können, wenn diese keinen Wert enthalten.

Probleme können hier beispielsweise entstehen, wenn ein Unternehmen seine Mitarbeiter mit Access verwaltet.

Trägt man einen neuen Mitarbeiter, dessen Name bereits vorhanden ist, mit einem Formular wie oben beschrieben in die Mitarbeitertabelle ein, bricht Access den Speichervorgang bei alleiniger Anwendung von DoCmd.Close kommentarlos ab.

Wenn man dann nach dem frisch eingegebenen Mitarbeiter sucht, stößt man vermutlich auf den bereits vorhandenen Mitarbeiter und reibt sich die Augen, da sein Datensatz ganz andere Detailinformationen aufweisen dürfte als der des soeben eingegebenen Mitarbeiters.

Das größte Problem ist, dieses Fehlverhalten zu erkennen. Seine Behebung ist einfach: Sie brauchen den Datensatz einfach nur vor dem Schließen des Formulars zu speichern, und zwar mit der folgenden Anweisung:

Me.Dirty = False

Wenn der neue Datensatz wegen bestehender eindeutiger Indizes nicht angelegt werden kann, meldet Access Fehler 3022, den Sie etwa wie folgt abfangen können:

Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

Sind Sie Abonnent?Jetzt einloggen ...
 

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Verwandte Beiträge:

Zippen ohne Zusatzkomponente

Kontextmenüs von A bis Z

© 2003-2015 André Minhorst Alle Rechte vorbehalten.