Mai 19, 2022, 18:03:04

Neuigkeiten:

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


Häuser mit mehreren Straßennamen und Hausnummern

Begonnen von Mero, April 23, 2022, 03:59:57

⏪ vorheriges - nächstes ⏩

Mero

Hallo zusammen,

ich führe eine Objektliste, die ganz normal angefangen hat. Name,Strasse,HNr,PLZ,Ort (Bezeichnungen aus meiner TestDB).

Dann kamen Objekte mit zwei und drei Straßennamen/Hausnummern dazu (Großobjekte an Straßenkreuzungen). Wir haben dann "improvisiert", sprich mehrere Straßennamen in ein Feld geschrieben usw. Schrecklich.

Heute abend hab ich mich mal drangesetzt, das Chaos zu beseitigen.
Vorab, ich hab es hinbekommen, aber nur über VBA, mit zwei verschachtelten Recordsets. Ist ne gute DIN A4 Seite Code geworden und hat 2 Stunden gedauert, ich bin da nicht so geübt.

Vorgabe war auch, dass Straßenname und Hausnummer in der Tabelle getrennt sich (wegen Normalisierung), im Formular aber in einem Feld stehen, also: "Straße_A 10, Straße_B 11, Straße_C 12"

Meine Frage ist nun, ob das nicht einfacher geht als mein Weg über VBA.

Zuerst hab ich einfach eine Erweiterungstabelle erstellt, nur mit Fremdschlüssel ObjektID, Strasse, HNr.
Das klappt auch, solange nur eine Straße/HNr dazukommt. Es steht also eine Str./HNr in der Objekttabelle, die andere Str./Hnr. in der Erweiterungstabelle.
Trage ich jetzt die dritte Str./HNr. in die Erweiterungstabelle ein, wird das Objekt im Formular zweimal angezeigt, einmal mit Objekttabelle-Str./Hnr + Erweiterung1, einmal mit Objekttabelle-Str./Hnr + Erweiterung2.

Nächste Idee: Die Str./HNr. Einträge irgendwie z.B. in eine temp.Tabelle in einem Feld vereinen und dann mit der Objekttabelle über Abfrage zusammenführen ala KombiStrHNr: Feld1 & ", " & Feld2.
Da hab ich nicht hinbekommen, da die Objekte unterscheidlich viele Straßen und HNr haben.

Nächste Idee: Strasse und HNr aus der Objekt-Tabelle entfernen und auch in Erweiterungstabelle eintragen. Dachte ich hat den Vorteil, wenn das Zusammenführen in ein einziges Feld (mit Kommas dazwischen) gelingt, ist das gelöst.
Ich habe aber das Zusammenführen nicht hinbekommen.

Also nochmal die Frage: Wie kann ich mehrere Straßennamen mit Hausnummern in einem Formular-Feld angezeigt bekommen, mit Komma zwischen den einzelnen Str./HNr.? Ohne eine DIN A4 Seite Code, wie ich es gemacht habe?

Danke für euren Input!

DF6GL

Hallo,



Wie "stark" ist diese Forderung nach einer Auflistung in einem Feld?

Solche Entnormalalisierung ist immer mit Aufwand verbunden und bringt mehr Ärger ein als es Vorteile gibt.

Ein kleines Unterform oder ein Listenfeld wäre einfacher zu realisieren ohne die besagten "Nebenwirkungen".


Ansonsten:

Wirf den ersten Adress-Block aus der Objekttabelle und nutze nur die Adress-Tabelle (tblObjektAdressen) in n-Beziehung zur Objekttabelle.

Um eine Adress-Liste in einem Formular-Textfeld zu generieren, kann die folgende Funktion benutzt werden:

https://web.archive.org/web/20200224055601/http://dbwiki.net/wiki/VBA_Tipp:_Liste_per_SQL_aufbauen

 
Aber wie gesagt, ein Unter-Formular, bzw. Listenfeld wäre die bessere Methode.



MzKlMu

Hallo,
ZitatVorgabe war auch, dass Straßenname und Hausnummer in der Tabelle getrennt sich (wegen Normalisierung),
Diese Vorgabe ist übertrieben, Straße und Hausnummer speichert man in einem Feld.

Warum Beim Zusammensetzen zwischen Straße und Hausnummer ein Unterstrich sein soll verstehe ich auch nicht.
Gruß
Klaus

Mero

Hallo,

danke für die schnellen Antworten.

Ich vergaß zu erwähnen, das es sich um ein Endlosformular handelt, sowas wie "Anzeige aller Objekte".
Die Anforderung, dass Straßen und Hausnummern in einem Feld stehen, ist einfach dem Platz geschuldet, in dem Formular werden noch weitere Infos angezeigt.
Ich wüsste auch nicht, wie es anders sinnvoll dargestellt werden soll, ich kann ja nicht drei Felder mit Str/HNr einfügen, wenn dann bei den meisten Objekten zwei Felder leer sind. Und dann kommt das Objekt mit vier Straßennamen (gibt es wirklich) und ich müsste ein weiteres Feld einfügen.
Das Zusammenführen in einem Feld spart einfach Platz.

@franz, DF6GL
Straße und HNR sind in der Tabelle getrennt. Ich find's ganz gut, weil es die Suchfunktionen vereinfacht.
Das Zusammenführen findet nur in der, dem Formular zugrundeliegenden, Abfrage statt, z.B: StrHNr: [Strasse] & ", " & [HNr]. So war es zumindest angedacht.
Danke für den Link, von der Logik her habe ich es genau so gemacht, nur habe ich das als in sich geschlossenen Ablauf über zwei geschachtelte Recordsets programmiert, da ja die Datenquelle fest definiert ist. Aber ein guter Link, falls man das flexibel nutzen möchte.
Übrigens muss man in der Zieltabelle ein leeres Feld einfügen, in die die zusammengeführten Daten geschrieben werden. Eine dynamische Anzeige geht nicht, dann steht im Endlosformular bei Straße/HausNr. bei allen Objekten der gleiche Eintrag.

@klaus
Beim Normalisieren scheiden sich die Geister. Wie oben erwähnt macht es aber die Suche einfacher. Natürlich könnte ich auch ein übergreifendes Suchfeld einrichten (hab ich an anderer Stelle gemacht), aber so wie es jetzt ist haben es die Anwender einfacher bie der Suche.

Den Unterstrich bei "Straße_A 10" hab ich nur zur Verdeutlichung benutzt. Natürlich sieht es real dann so aus: Hauptstraße 12, Petersplatz 1, Turmstraße 76.

Ist irgendwie das gleiche Rumgemurkse wie bei datensatzspezifisch gefilterten Combofeldern in einem Endlosformular. Das hat mich auch Stunden gekostet.

Grüße und schönes Wochenende

DF6GL

Hallo,

ZitatÜbrigens muss man in der Zieltabelle ein leeres Feld einfügen, in die die zusammengeführten Daten geschrieben werden. Eine dynamische Anzeige geht nicht, dann steht im Endlosformular bei Straße/HausNr. bei allen Objekten der gleiche Eintrag.

Das trifft nicht so zu.

Binde ein Formulartextfeld an die Abfrage-Spalte, in der die (Public)-Funktion steht.


Zitatist einfach dem Platz geschuldet, in dem Formular werden noch weitere Infos angezeigt.

Wie groß ist denn der Monitor, bzw. welche Auflösung hat der?  ;)  ;D



ZitatDas Zusammenführen in einem Feld spart einfach Platz.

Sehe ich auch nicht so. Das Formfeld muss mindestens so lang (breit) sein, um den zusammengesetzten String aus der max. zu erwartenden Adress-Liste anzeigen zu können, außer man nimmt ein Scrollen im Textfeld in Kauf.


ZitatIst irgendwie das gleiche Rumgemurkse wie bei datensatzspezifisch gefilterten Combofeldern in einem Endlosformular. Das hat mich auch Stunden gekostet.

Wie sieht denn das "Rumgemurkse" aus?

Mero

Hallo Franz,

das werd ich später mal versuchen.
"Binde ein Formulartextfeld an die Abfrage-Spalte, in der die (Public)-Funktion steht."

Wir haben 1920er Monitore. Wie schon geschrieben, da sind noch ein paar mehr Informationen.

Zitat:
"Sehe ich auch nicht so. Das Formfeld muss mindestens so lang (breit) sein, um den zusammengesetzten String aus der max. zu erwartenden Adress-Liste anzeigen zu können, außer man nimmt ein Scrollen im Textfeld in Kauf."

Bei einem zusammengesetzten String hat man immer weniger "cuts" als wenn du den Platz auf drei Felder verteilst, z.B. wenn das Objekt zwei lange und einen kurzen Straßennamen hat. Ich sehe es ja auch hier am lebenden Beispiel.

Zitat:
"Wie sieht denn das "Rumgemurkse" aus?"

Wie z.B. hier beschrieben (wobei der Lösungsansatz bei mir nicht funktionert hat):
https://www.datawright.com.au/access_resources/dependent_combos_on_continuous_forms.htm

Viele Grüße

Mero

Hallo Franz,

das hat SUUUUUPER geklappt.

Ich hab ein benutzerdefiniertes Feld in die Abfrage eingefügt, meine Private Sub in eine Public Funktion kopiert, angepasst, Ergebnis übergeben.
Klappt super, ist schneller und braucht nur 1/3 Code von meinem vorherigen Ansatz.

DANKE!