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
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?
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.
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
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
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.
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...
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
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
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 SubZitatLaut 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
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.
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