Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Kombifeld für PLZ - MsgBox für Werte die es in der Liste nicht gibt

Begonnen von herb54, März 02, 2020, 18:13:44

⏪ vorheriges - nächstes ⏩

herb54

Hallo zusammen,
ich habe eine Postleitzahlentabelle importiert als tblPLZ. Diese enthält folgende Felder: ID, PLZIDRef, PLZ, Ort, Bundesland. Eine Auswahlabfrage (qryPLZ) erzeugt mir aus dieser Tabelle die Felder PLZ, Ort, Bundesland.
In einem Formular, welches als Datensatzquelle mit einer Adresstabelle verknüpft ist, gebe ich Adressen ein.
Ein Kombifeld des Formulars schreibt mir über Anwahl mit der Maus (Ereignis: Nach Aktualisierung) oder über die Tastatur (Beim Verlassen) über:
Me!PLZ = Me!cmbPLZ.Column(0) und Me!Ort = Me!cmbPLZ.Coumn(1) die Postleitzahl und den dazugehörigen Ort in die entsprechenden Felder der Adresstabelle.
Wie fange ich jedoch fehlerhafte Eingaben von Postleitzahlen ab die es nicht gibt in der Tabelle tblPLZ? Die NotInList Eigenschaft beschäftigt sich ja offensichtlich nur darum solche Einträge anzufügen, was ich aber gar nicht möchte. Mein Ziel wäre es nur mit Anzeige einer MsgBox darauf aufmerksam zu machen, dass es diese PLZ nicht gibt.
Im Voraus vielen Dank!
Grüße
Herbert

DF6GL

Hallo,

was meinst Du mit "Abfangen"?

Wenn Du in die Adresstabelle die PLZ durch Auswahl in einem neuem DS eingibst, gibt es die dazugehörenden Orte..


Oder ist das ein nachträglicher Vorgang, in vorhandene Adressen zusätzlich zu den  Orten die PLZ einzutragen?

Wenn es in einem solchen Fall keinen Ort/Plz in der tblPLZ gibt, so muss mit dem Kombifeld-Ereignis "Bei nicht in Liste" zunächst diese neue Kombination in tblPLZ eigetragen werden.

Btw: Für denselben Ort kann es mehrere PLZ geben...

Was willst Du genau erreichen?
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

MzKlMu

Hallo,
ZitatAuswahlabfrage (qryPLZ) erzeugt mir aus dieser Tabelle die Felder PLZ, Ort, Bundesland.
Die Abfrage sollte auch die ID beinhalten.

Zitatdie Postleitzahl und den dazugehörigen Ort in die entsprechenden Felder der Adresstabelle.
In die Adresstabelle gehört dann nur diese ID, sonst keine weiteren Felder, weder der Ort noch die PLZ.
Beides erhältst Du dann einfach über eine Abfrage mit der tblPLZ und der Adresstabelle mit einer Verknüpfung über die ID.
Gruß Klaus

herb54

Hallo Franz,

das Kombifeld dient als Hilfe beim Ausfüllen der Adresstabelle (mit Eingabe der PLZ im Kombifeld werden PLZ und Ort automatisch übertragen). Jetzt gibt es die Möglichkeit, dass eine Eingabe erfolgt, für die es keine Postleitzahl gibt (Beispiel: 99999 - ich weiß ist ein blödes Beispiel). Momentan ist es so, dass dann diese falsche Zahl einfach  im Feld steht aber der Ort nicht eingesetzt wird. Es wäre einfach super, wenn bei Eingabe einer PLZ die es in der Tabelle tlbPLZ nicht gibt mit einer MsgBox darauf hingewiesen wird.
Grüße
Herbert

herb54

Hallo Klaus,

könnte dies nicht auch über eine Beziehung mit referentieller Integrität zwischen tblPLZ und qryPLZ erfolgen (Verknüpfung über ID)?

Gruß
Herbert

MzKlMu

Hallo,
dass dann diese falsche Zahl einfach  im Feld steht aber der Ort nicht eingesetzt wird.
Wo soll denn der Ort herkommen, wenn es eine falsch PLZ ist ?

Siehe auch mein vorheriger Beitrag.

Gruß Klaus

DF6GL

Hallo,

wenn die Kombis bei "Nur Listeneinträge" mit  "Nein" definiert sind, kann in die Kombifelder eingegeben werden, was man möchte...

Soll heißen, wenn die Tabellen nicht vernünftig (normalisiert) aufgebaut und in Beziehung gesetzt werden, ähnelt das Ganze eher einem Notizblock denn einer DB...
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

PhilS

Postleitzahlen, Orte und Straßen stehen in der Theorie in einer schönen M:N-Beziehung, die man als Datenbankentwickler sauber ausmodellieren und somit nur "gültige" Eingaben zulassen kann.

In der Praxis sieht das oft anders aus. Sowohl Änderungen in der o.g. Zuordnungslogik seitens der jeweiligen Post als auch physische, z.B. straßenbauliche, Änderungen werden in solchen Datenbeständen oft nicht zeitnah abgebildet.

Wenn man eine korrekte Adresse erfassen möchte, die laut der Logik der Anwendung nicht gültig und somit unzulässig ist, ist das extremst ärgerlich. - Eigene Erfahrung! - Der hier geschmähte "Notizblock" wäre da eine Wohltat!
Zitat von: herb54 am März 02, 2020, 18:13:44Wie fange ich jedoch fehlerhafte Eingaben von Postleitzahlen ab die es nicht gibt in der Tabelle tblPLZ? Die NotInList Eigenschaft beschäftigt sich ja offensichtlich nur darum solche Einträge anzufügen, was ich aber gar nicht möchte. Mein Ziel wäre es nur mit Anzeige einer MsgBox darauf aufmerksam zu machen, dass es diese PLZ nicht gibt.
Wenn du nur die PLZ in deinem DropDown anzeigen/auswählen lässt, ohne zusätzliche Schlüsselspalte (das würde ich empfehlen (s.o.)), dann kannst du den folgenden Code verwenden.

Private Sub Combo0_AfterUpdate()

    If Not CBool(Nz(Me.Combo0.Column(0), "") = Me.Combo0.Value) Then
        MsgBox "Eintrag gibt es nicht"
    End If

End Sub


Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

herb54

Hallo PhilS,

hatte leider mit deinem Code eine Fehlermeldung: "Unzulässige Verwendung von Null". Ich habe den Code jetzt etwas angepasst und so läuft er einwandfrei und gibt die MsgBox-Fehlermeldung aus:

Private Sub cmbPLZ_AfterUpdate()
Me!PLZ = Me!cmbPLZ.Column(0)
Me!Ort = Me!cmbPLZ.Column(1)
  If IsNull(Me.cmbPLZ.Column(0)) Then
        MsgBox "Eintrag gibt es nicht"
    End If
End Sub

Ich kann dir bezüglich der Problematik mit Straßennamen recht geben: Laut Google gibt es meine Hausnummer nicht d.h. ich muss immer die Nummer meines Nachbarn eingeben. Ich habe die gleiche Nummer wie er nur mit dem Zusatz "C".
Irgendwie seltsam, wenn man in älteren Access Büchern nachschaut wird die komplette Adresse (Name, Vorname, Straße, PLZ, Ort usw.) in einer Tabelle erfasst. Scheinbar hat man es damals mit der Normalisierung noch nicht ganz so genau genommen.
Vielen Dank für deine Info!
Grüße
Herbert

Beaker s.a.

Hallo Herbert,
Wenn der Code in der Reihenfolge funzt, ist "Me!PLZ" aber auch NULL. IMO gehören
die beiden ersten Zeilen in einen Else-Zweig des If-Konstrukts
Private Sub cmbPLZ_AfterUpdate()
    If IsNull(Me.cmbPLZ.Column(0)) Then
        MsgBox "Eintrag gibt es nicht"
    Else
        Me!PLZ = Me!cmbPLZ.Column(0)
        Me!Ort = Me!cmbPLZ.Column(1)
    End If
End Sub

ZitatLaut Google gibt es meine Hausnummer nicht
Google ist dafür auch keine Referenz, das sind nur die Leitdaten der Post (DHL).
Aber auch da gibt es keine Zusätze bei den Hausnummern. Die werden dort bei
ungeteilten Strassen gar nicht angegeben (HNRTYP = "N"). Bei geteilten
Strassen werden die Nummern der Abschnitte in zwei Feldern (von/bis) angegeben,
und der HNRTYP ist "U" (ungerade) oder "G" (gerade).
Zitatkomplette Adresse (Name, Vorname, Straße, PLZ, Ort
Ausser den Namen*) würde ich eine Adresse auch immer komplett mit den Klartexten
abspeichern, da es in den PLZleitdaten auch Änderungen geben kann (Strassenabschnitte
verschieben sich, Orte werden eingemeindet). Die Redundanz nehme ich in dem Fall in Kauf.
*) Die Adressen bekommen einen FK auf die Person, so dass ich beliebig viele Adressen
zu ihr anlegen kann. Wichtig z.B. für Rechnungen, die sich ja nicht verändern dürfen.
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)

PhilS

Zitat von: herb54 am März 03, 2020, 21:59:54
hatte leider mit deinem Code eine Fehlermeldung: "Unzulässige Verwendung von Null".
Das hängt vermutlich damit zusammen, dass deine ComboBox zwei Spalten hat. Ich bin von nur einer Spalte ausgegangen und hatte diesen Fall (so meine ich) explizit behandelt.

Zitat von: herb54 am März 03, 2020, 21:59:54Irgendwie seltsam, wenn man in älteren Access Büchern nachschaut wird die komplette Adresse (Name, Vorname, Straße, PLZ, Ort usw.) in einer Tabelle erfasst. Scheinbar hat man es damals mit der Normalisierung noch nicht ganz so genau genommen.
Aus meiner Sicht kann man im Kontext von Adressen keine pauschalen Normalisierungsregeln vorgeben. Das hängt immer von den Anforderungen und dem Zweck der Anwendung ab (z.B. eine Person mit mehreren Adressen). Bzgl. PLZ/Ort/Str kann man, wie bereits erwähnt, theoretisch normalisieren, aber da die Grunddaten von externen Einflüssen bestimmt werden, ist das aus meiner Sicht i.d.R. nicht sinnvoll.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

herb54

Hallo,
Dank an alle die mir hier geholfen haben! Mein Problem wurde gelöst, und ich habe wieder einiges Neues erfahren. Bei Access lernt man nie aus und es ist toll, dass man hier von euch geholfen bekommt!
Grüße
Herbert