Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Kombinationsfeld automatisch füllen

Begonnen von neuland14, März 02, 2023, 19:18:56

⏪ vorheriges - nächstes ⏩

neuland14

Hallo zusammen,

habe hier ein Youtube Video gefunden mit entsprechenden VBA Code:


Der dort besprochene Code schränkt ein Kombifeld auf ein bestimmte auswahl ein.

Ich würde aber gerne, dass nicht nur einschränkt sondern das Feld ausfüllt und der Focus gleich in das nächste Feld springt.

Es gibt zwei Tabellen tblPLZ und tblKunden

Erstes Feld "PLZ" zweite Feld "Ort"

Wenn man eine PLZ auswählt, soll das Feld Ort automatisch gefüllt wird.

Code:
Private Sub cboPLZ_AfterUpdate()
 Dim strSQL As String
    strSQL = "SELECT ID, ort FROM tblPLZ WHERE ID = " & Me!cboPLZ
    ' Debug.Print strSQL
    Me!cboWohnort.RowSource = strSQL
End Sub

Was muss noch erweitert werden?


MzKlMu

#1
Hallo,
ZitatWenn man eine PLZ auswählt, soll das Feld Ort automatisch gefüllt wird.
Das ist überflüssig.
Der Ort ergibt sich automatisch über die PLZ.
Deine PLZ Tabelle sollte einen Autowert als Primärschlüssel haben. In die Kundentabelle kommt dann nur der Primärschlüssel als Fremdschlüssel. Eine PLZ taugt nicht als Primärschlüssel, denn eine PLZ ist nicht eindeutig. Zu einer PLZ kann es mehr als einen Ort geben.

Zeige bitte mal ein Bild des Beziehungsfensters, das es hoffentlich gibt.

Das obige Video hat mit Deinem Vorhaben nichts zu tun.
Gruß Klaus

Beaker s.a.

Hallo,
ZitatZu einer PLZ kann es mehr als einen Ort geben.
Und deshalb muss das Feld für den Ortsnamen auch ein Kombi sein (gebunden an
die von Klaus erwähnte ID). Vor Allem, wenn deine tblPLZ nicht vollständig ist
(Leitdaten von DHL). Denn dann musst du nicht vorhandene Orte erst anlegen, wozu
man gewöhnlich das Ereignis "NotInList" eines Kombis verwendet.

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Köbi

Hallo
Ich habe hier ein Beispiel, welches evtl. hilfreich ist.

neuland14

Zitat von: MzKlMu am März 02, 2023, 19:24:14Hallo,
ZitatWenn man eine PLZ auswählt, soll das Feld Ort automatisch gefüllt wird.
Das ist überflüssig.
Der Ort ergibt sich automatisch über die PLZ.
Deine PLZ Tabelle sollte einen Autowert als Primärschlüssel haben. In die Kundentabelle kommt dann nur der Primärschlüssel als Fremdschlüssel. Eine PLZ taugt nicht als Primärschlüssel, denn eine PLZ ist nicht eindeutig. Zu einer PLZ kann es mehr als einen Ort geben.

Zeige bitte mal ein Bild des Beziehungsfensters, das es hoffentlich gibt.

Das obige Video hat mit Deinem Vorhaben nichts zu tun.

Bisher hatte ich noch keine Beziehung zwischen den Tabellen hergestellt  ::)

Ich habe hier mal eine Test-DB erstellt, vielleicht hilft das meiner Erklärung bzw. Problem weiter.

Danke!

Sie dürfen in diesem Board keine Dateianhänge sehen.


neuland14

Zitat von: Beaker s.a. am März 03, 2023, 16:26:03Vor Allem, wenn deine tblPLZ nicht vollständig ist
(Leitdaten von DHL).


Hallo,

kann ich nicht beurteilen ob das wirklich vollständig ist.

Habe die PLZ hier heruntergeladen: PLZ mit Kombi und Eintrag in beiden Feldern:

Download: https://www.suche-postleitzahl.org/downloads

Aber ja ich denke, man sollte schon in der Lage sein noch weitere PLZ's hinzuzufügen!


MzKlMu

Hallo,
im Anhang die umgebaute DB.
- In der Adressentabelle braucht es nur den Fremdschlüssel zu PLZ und Ort
- Die Nachschlagefunktion in der Tabelle Adressen habe ich entfernt. Die braucht man nur in Formularen
- korrekte Beziehungen eingerichtet
- die PLZ ist keine Zahl, sondern kurzer Text, PLZ können auch mit 0 beginnen und das geht bei einer Zahl nicht.

Datenherkunft des Formulars ist eine Abfrage mit beiden Tabellen.
Wenn Du ein PLZ auswählst, wird automatisch auch der Ort angezeigt.
Ort und PLZ werden aber in der Adressentabelle nicht gespeichert, sondern nur die PLZID als Fremdschlüssel.

Bei Fragen melden.
Gruß Klaus

Köbi

Hallo Klaus
Dein Beispiel sieht auf den ersten Blick verplüffend einfach aus. Nach meiner Meinung hat es aber folgende "Mängel".

1. Wenn ich eine neue Adresse erfasse mit dem Wohnort Singen, dessen PLZ ich aber nicht kenne, passiert im Kombifeld nichts. Ich muss mich dann im Kombifeld auf die Suche nach Singen begeben. Finde ich nicht gerade optimal.

2. Wenn ich eine bestehende Adresse ändere, (zB. die Adresse von Maier mit Wohnort Reken), weil mir einfällt, dass Maier gar nicht in Reken sondern in Osnabrück wohnt, steht künftig in der tblPLZ Osnabrück auch mit der PLZ 48734 da. Das ist sicher falsch.
Das kann man wohl verhindern, indem man das Feld "Wohnort" für eine direkte Eingabe sperrt. Was aber wiederum zur Folge hat, dass man die PLZ kennen muss.

Ich will dein Beispiel nicht kritisieren, weil der TE ja folgende Frage stellt
ZitatWenn man eine PLZ auswählt, soll das Feld Ort automatisch gefüllt wird.
Dein Beispiel erfüllt eigentlich diese Anforderung.

"Meine" Demo-DB in #3 geht weiter, indem beide Wege funktionieren. Man kann eine PLZ eingeben und der Ort wird automatisch eingetragen (wie in deinem Beispiel). Man kann aber auch umgekehrt den Ort eintragen, und die PLZ wird automatisch eingetragen. Hat ein Ort mehrere PLZ steht eine Auswahlliste zur Verfügung.

MzKlMu

Hallo,
Kritik ist immer willkommen, kein Problem.
Wenn man für den Ort auch ein Kombi anlegt, kann man auch nach einem Ort suchen. Beide Kombis müssen an das Fremdschlüsselfeld gebunden sein. Nur die Spalten Ort und PLZ sind vertauscht. Die Kombis aktualiseren sich gegenseitig automatisch.
Beispiel anbei.
Um neue Orte oder Plz einzugeben nutzt man das Ereignis "Bei nicht in Liste" und öffnet ein kleines Formular. Habe ich jetzt aber nicht eingebaut.
Gruß Klaus

Köbi

Danke.
Darauf hätte ich eigentlich selbst kommen sollen.

Schönes Wochenende

neuland14

Zitat von: Köbi am März 03, 2023, 19:14:32Ich habe hier ein Beispiel, welches evtl. hilfreich ist.

Hallo Köbi,

danke das du so freizügig deinen VBA Code zur Verfügung stellst.
Hätte die Frage vermutlich in einer anderen Kategorie stellen sollen z.B. unter "Formular" da meine VBA Kenntnisse im Grunde gegen Null gehen  :-\

Auch wenn das sehr gut Dokumentiert ist, ist es für  mich als Access & VBA Anfänger etwas zu schwierig.

Danke!

MzKlMu

@neuland14
hast du mein Beispiel in #6 und #8 nicht gesehen?
Das ist nur ein Formular und kein VBA.
Gruß Klaus

neuland14

#12
Zitat von: MzKlMu am März 04, 2023, 12:16:26die PLZ ist keine Zahl, sondern kurzer Text, PLZ können auch mit 0 beginnen und das geht bei einer Zahl nicht.

Hallo  MzKlMu,

danke für deine Unterstützung und dem anpassen der DB.

Ich habe für das PLZ eine Zahl genommen, dass man ausser Zahlen nichts anderes eingeben kann.

Habe jetzt aber auch gesehen, dass man dem Textfeld ja auch das Format "PLZ" zuweisen kann.

Habe mir deine Lösung angeschaut und hoffe das ich alles soweit verstanden habe.

Um die Beziehungen und Abfragen besser zu verstehen habe ich mal noch eine dritte Tabelle und ein weiteres Feld der Tabelle "Adressen" hinzugefügt.

Vielleicht kannst du ja nochmal kurz drüber schauen ob dies so okay ist  ::)

Aber ein Problem ist jetzt noch aufgetreten.

Wenn man z.B. eine PLZ eingibt die es nicht gibt kommt folgende Meldung:

Der von Ihnen eingegebene Text ist kein Element der Liste.  -- Was ja korrekt ist  ;D 

Wenn man jetzt aber das Feld leer machen möchte um z.B. das Formular für die PLZ aufzurufen kommt diese Meldung:

Sie wollten den Null-Wert einer Variablen zuweisen, die nicht den Datentyp Variant hat.







neuland14

#13
Zitat von: MzKlMu am März 05, 2023, 17:19:21@neuland14
hast du mein Beispiel in #6 und #8 nicht gesehen?
Das ist nur ein Formular und kein VBA.

Hi, klar habe ich deinen Eintrag gelesen, doch ich meinte ja auch nicht dein Beispiel sondern die Dateien wo Köbi angehängt hat  ;D

MzKlMu

#14
Hallo,
das mit der neuen Tabelle (geschlechter) hast Du richtig gemacht.

ZitatWenn man jetzt aber das Feld leer machen möchte
Eine solche Eingabe muss mit der ESC Taste abgebrochen werden (2x drücken). Der Fehler kann dann mit VBA abgefangen werden bzw. zur Eingabe eines neuen Ortes genutzt werden. Aber da wird dann VBA benötigt.

UNd noch ein Hinweis:
Verzichte auf die eingebetten Makros. Es gibt keine Hilfe dazu. Hier im Forum verwendet die niemand.
Arbeite Dich in VBA ein, Du wirst nicht drum rum kommen.
Gruß Klaus