Aktualisierung eines Kombinationsfeldes

Hallo,

ich habe in Access eine Adressdatenbank erstellt. Ort und Postleitzahl stehen in einer Tabelle (Postleitzahlen), die übrigen Adressdetails in einer anderen (Adressen).

Das Formular zur Adresserfassung enthält ein Kombinationsfeld, aus der die Postleitzahl gewählt wird, so dass der Ort dann automatisch eingetragen wird.

Die Tabelle Postleitzahlen enthält über 22000 Einträge, trotzdem kommt es immernoch vor, dass mal eine Postleitzahl nicht vorhanden ist. Aus diesem Grund habe dem Adresserfassungsfomular eine Schaltfläche „Neue PLZ“ hinzugefügt. Nach Klick hierauf wird ein Formular, basierend auf der Tabelle Postleitzahlen, geöffnet, in dem die neue PLZ und der dazugehörige Ort eingegeben werden kann. Geschlossen wird dieses PLZ-Eingabeformular dann über eine Schaltfläche, die den Datensatz speichert und das Formular schließt.

Auch wenn der Benutzer das getan hat, steht ihm die neu erfasste PLZ in dem Kombinationsfeld des Adress-Erfassungsformulars nicht zur Verfügung. Dies geht erst, wenn das Adress-Erfassungsformular geschlossen und erneut geöffnet wurde.

Was muss ich ändern, damit die Aktualisierung gleich statt findet?

Vielen Dank vorab und viele Grüße aus Hamburg,
Barbara

Du mußt die Datenquellen des Erfassungsformulars neu abfragen. Passiert natürlicherweise wenn Du das Formular schließt und wieder öffnest. Kannst Du aber auch in VBA mit dem Befehl
Forms![Formularname].Requery
erreichen.
Das Formular steht dann aber wieder auf dem ersten Datensatz deiner Datenquelle. Also erst noch die Kennummer (Primärschlüssel) in eine Variable einlesen, nach dem Requery mittels
DoCmd.FindRecord Kennummer (Focus vorher auf Kennummer setzen!)
den gerade bearbeiteten Datensatz wieder zum aktuellen machen.

HTH

Ulrich

Du mußt die Datenquellen des Erfassungsformulars neu abfragen.
Passiert natürlicherweise wenn Du das Formular schließt und
wieder öffnest. Kannst Du aber auch in VBA mit dem Befehl
Forms![Formularname].Requery
erreichen.
Das Formular steht dann aber wieder auf dem ersten Datensatz
deiner Datenquelle. Also erst noch die Kennummer
(Primärschlüssel) in eine Variable einlesen, nach dem Requery
mittels
DoCmd.FindRecord Kennummer (Focus vorher auf Kennummer
setzen!)
den gerade bearbeiteten Datensatz wieder zum aktuellen machen.

es geht auch einfacher, in dem Du nur das PLZ-Feld aktualisierst.

Forms![Formularname].PLZ.requery

Gruß Wolfgang

Das Formular zur Adresserfassung enthält ein Kombinationsfeld,
aus der die Postleitzahl gewählt wird, so dass der Ort dann
automatisch eingetragen wird.

hast Du Dir mal überlegt, das es anders herum einfacher wäre!
Keiner schreibt einem Programmierer vor, die Reihenfolge PLZ/ORT zu programmieren, wenn’s für den User anders herum einfacher wäre.
Habe mit meiner Version der Adressverwaltung nur positive Erfahrungen geerntet.

Die Tabelle Postleitzahlen enthält über 22000 Einträge,
trotzdem kommt es immernoch vor, dass mal eine Postleitzahl
nicht vorhanden ist.

Klar, bei Großstädten ist das normal, da die PLZ von der Straße und Hausnummer abhängt.

Aus diesem Grund habe dem
Adresserfassungsfomular eine Schaltfläche „Neue PLZ“
hinzugefügt.

eigentlich nicht nötig, das „weiss“ doch das Programm. Schau dir mal den Event „Bei nicht in Liste“ an.

Nach Klick hierauf wird ein Formular, basierend
auf der Tabelle Postleitzahlen, geöffnet, in dem die neue PLZ
und der dazugehörige Ort eingegeben werden kann. Geschlossen
wird dieses PLZ-Eingabeformular dann über eine Schaltfläche,
die den Datensatz speichert und das Formular schließt.

meiner Meinung nach nicht nötig. Da die neue PLZ ja im PLZ-Feld sowieso eingetragen wird, und der Ort anschließend ja auch.

Speichere beide Eingaben beim Event „Fokusverlust“ des Ortes (oder falls Du die Felder tauscht, s.o., dann natürlich PLZ) in die PLZ_ORT - Tabelle und Du sparst Dir das zusätzliche Fenster und dem User eine Menge zusätzlicher Mausklicks.

Auch wenn der Benutzer das getan hat, steht ihm die neu
erfasste PLZ in dem Kombinationsfeld des
Adress-Erfassungsformulars nicht zur Verfügung. Dies geht
erst, wenn das Adress-Erfassungsformular geschlossen und
erneut geöffnet wurde.

siehe mein Posting unten…

Gruß Wolfgang

es geht auch einfacher, in dem Du nur das PLZ-Feld
aktualisierst.

Forms![Formularname].PLZ.requery

Gruß Wolfgang

Guter Tip! Danke!

Ulrich

Das Formular zur Adresserfassung enthält ein Kombinationsfeld,
aus der die Postleitzahl gewählt wird, so dass der Ort dann
automatisch eingetragen wird.

hast Du Dir mal überlegt, das es anders herum einfacher wäre!
Keiner schreibt einem Programmierer vor, die Reihenfolge
PLZ/ORT zu programmieren, wenn’s für den User anders herum
einfacher wäre.
Habe mit meiner Version der Adressverwaltung nur positive
Erfahrungen geerntet.

Die Tabelle Postleitzahlen enthält über 22000 Einträge,
trotzdem kommt es immernoch vor, dass mal eine Postleitzahl
nicht vorhanden ist.

Klar, bei Großstädten ist das normal, da die PLZ von der
Straße und Hausnummer abhängt.

Aus diesem Grund habe dem
Adresserfassungsfomular eine Schaltfläche „Neue PLZ“
hinzugefügt.

eigentlich nicht nötig, das „weiss“ doch das Programm. Schau
dir mal den Event „Bei nicht in Liste“ an.

Nach Klick hierauf wird ein Formular, basierend
auf der Tabelle Postleitzahlen, geöffnet, in dem die neue PLZ
und der dazugehörige Ort eingegeben werden kann. Geschlossen
wird dieses PLZ-Eingabeformular dann über eine Schaltfläche,
die den Datensatz speichert und das Formular schließt.

meiner Meinung nach nicht nötig. Da die neue PLZ ja im
PLZ-Feld sowieso eingetragen wird, und der Ort anschließend ja
auch.

Speichere beide Eingaben beim Event „Fokusverlust“ des Ortes
(oder falls Du die Felder tauscht, s.o., dann natürlich PLZ)
in die PLZ_ORT - Tabelle und Du sparst Dir das zusätzliche
Fenster und dem User eine Menge zusätzlicher Mausklicks.

OK, das hört sich supergut an, aber wie genau mache ich das? Der User hat in das Kombinationsfeld mit den PLZ die gewünschte eingegeben und drückt die Tab-Taste. Es erscheint die Fehlermeldung, dass dies kein Element der Liste ist (Wie kann ich die eigentlich unterdrücken?). Wie lautet der Befehl zum Speichern beim Event „Fokusverlust“?

Schonmal vielen Dank,
Barbara

Auch wenn der Benutzer das getan hat, steht ihm die neu
erfasste PLZ in dem Kombinationsfeld des
Adress-Erfassungsformulars nicht zur Verfügung. Dies geht
erst, wenn das Adress-Erfassungsformular geschlossen und
erneut geöffnet wurde.

siehe mein Posting unten…

Gruß Wolfgang

OK, das hört sich supergut an, aber wie genau mache ich das?
Der User hat in das Kombinationsfeld mit den PLZ die
gewünschte eingegeben und drückt die Tab-Taste. Es erscheint
die Fehlermeldung, dass dies kein Element der Liste ist (Wie
kann ich die eigentlich unterdrücken?). Wie lautet der Befehl
zum Speichern beim Event „Fokusverlust“?

Hi Barbara,

Moment, nicht verwechseln: wenn Du eine Funktion bei „nicht in Liste“ einbaust, ist der Event bei Fokusverlust nicht nötig!!

Vorraussetzung ist, das die Feld-Reihenfolge ORT - PLZ verwendet wird!

Z.B. der Benutzer gibt München für Ort ein. München ist in der ORT_PLZ Tabelle vorhanden. Doch München hat ja mehrere PLZ-Nummern. Also gibst Du die Haupt-PLZ von München vor. (Eine genaue Auswertung über Straße ist ja noch nicht integriert)
Jetzt gibt der Benutzer die neue PLZ ein. (Vorteil, Du hast nun schon den Ort)

Jetzt kommt die Funktion „bei nicht in Liste“.

Private Sub PLZ_NotInList(NewData As String, Response As Integer)
Dim sql As String

sql = „INSERT INTO ORT_PLZ (PLZ,ORT) SELECT '“ & NewData &_
„’ AS Ausdr1, '“ & Me.ORT & „’ AS Ausdr2, *;“

DoCmd.RunSQL sql

Response = acDataErrAdded

End Sub

Damit wird jetzt PLZ + Ort an die Basistabelle ORT_PLZ angefügt.

Fertig.

Gruß Wolfgang
(ist etwas geändert eine geile Funktion um nur eine(1)Vorgabentabelle zu füllen für ALLE Pulldownfelder im Programm, z.B. Anrede, Titel, Geschlecht etc.)

1 Like

Danke an Euch beide! (oT)