Neuigkeiten:

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

Mobiles Hauptmenü

Textfeld mit Großschreibung vor dem Komma und Kleinschreibung nach dem Komma

Begonnen von Werner Mader, März 28, 2019, 19:31:09

⏪ vorheriges - nächstes ⏩

Werner Mader

Hallo liebes Forum ich brauche euer Wissen !

Ich habe eine bestehende Datenbank übernommen in welcher sich unter anderem ein Textfeld für die Eingabe der Adresse einer Person befindet. Das Textfeld beinhaltet die Postleitzahl, den Ortsnamen, ein Komma, den Straßennamen und die Hausnummer. Als Beispiel    9999 Musterort, Musterstrasse 99. Ich möchte das Eingabeformat so anpassen, dass vor dem Komma alles in Großbuchstaben (die Zahlen der PLZsollen dabei ignoriert werden) und nach dem Komma in Kleinbuchstaben (mit Ausnahme des ersten Buchstabens nach dem Komma) weitergeschrieben wird. Als Beispiel aus 9999 Musterort, Musterstrasse 99 soll 9999 MUSTERORT, Musterstrasse 99 werden. Das Problem liegt nun darin, dass die Standard Eingabeformate nicht funktionieren, da die Länge des Ortsnamens ja ständig variiert und zudem ist es ein einziges Textfeld und nicht unterteilt in 3 einzelne Felder (da wäre es ja viel einfacher). Wäre über Tipps wie das zu lösen ist sehr dankbar. mfG Werner

MzKlMu

Hallo,
wenn Du es richtig machen willst, dann teilst Du Feld auf getrennte Felder auf, wie es in einer Datenbank sein sollte.
PLZ, Ort und Straße mit Hausnummer.
Das würde dann auch der 1.Normalform (atomare Inhalte) entsprechen.
Dann lässt sich auch Deine Anforderung ohne Eingabeformat problemlos realisieren.
Gruß Klaus

Werner Mader

Hallo Klaus!
Danke für deine Antwort.
Leider kann ich die Adresszeile nicht mehr aufteilen, das wäre zuviel Aufwand bei über 50 TSD Datensätzen und unzählichen Abfragen/Verknüpfungen. Mir wäre es auch lieber gewesen wenn ich es splitten könnte. Habe es leider so geerbt und ist in Betrieb seit 1996  ;). lG Werner

DF6GL

Hallo,

welcher tiefere Sinn steckt hinter der geforderten Schreibweise?


Wie auch immer, ein Lösung könnte so aussehen:

In einem Formular mit Basis zur Tabelle werden 3 zusätzliche Felder ("txtPLZ", "txtOrt", "txtStrasse") hinzugefügt. Nach Eingabe der 3 Werte können diese mit einer VBA-Funktion entspr. der Vorgabe zu einem String zusammengefügt und dem eigentlichen Adressfeld zugewiesen werden.

Wenn diese "Änderung" für alle DS angewendet werden soll, ist eben die Funktion in einer Aktualisierungsabfrage einzubauen und anzuwenden.

PhilS

Zitat von: Werner Mader am März 29, 2019, 08:55:20
Leider kann ich die Adresszeile nicht mehr aufteilen, das wäre zuviel Aufwand bei über 50 TSD Datensätzen und unzählichen Abfragen/Verknüpfungen.
Mit einer Aktualisierungsabfrage, einer neuen Auswahlabfrage als Abstraktionsebene und einem geeigneten Search&Replace-Tool, sollte das in weniger als 1 Std. machbar sein.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

Werner Mader

Der Lösungsansatz klingt plausibel, könntest du mir bitte aber das Search&Replace-Tool etwas näher erläutern.
Danke lG Werner

Maxel

Mittels Instr() kannst Du das erste Komma lokalisieren und den Teil davor dann mittels Left(), Replace() und Ucase() in Großbuchstaben umwandeln. Zahlen werden davon natürlich nicht berührt.

ZitatMit einer Aktualisierungsabfrage, einer neuen Auswahlabfrage als Abstraktionsebene und einem geeigneten Search&Replace-Tool, sollte das in weniger als 1 Std. machbar sein.
Er schreibt allerdings von unzähligen Abfragen/Verknüpfungen...
Viele Grüße
Maxel

jagger

Hallo Maxel,

DF6GL (Antwort #3) schreibt:

ZitatIn einem Formular mit Basis zur Tabelle werden 3 zusätzliche Felder ("txtPLZ", "txtOrt", "txtStrasse") hinzugefügt. Nach Eingabe der 3 Werte können diese mit einer VBA-Funktion entspr. der Vorgabe zu einem String zusammengefügt und dem eigentlichen Adressfeld zugewiesen werden.

Es müssten also keine Abfragen geändert werden.

LG
jagger

Maxel

@jagger

Mit
ZitatNach Eingabe der 3 Werte
bezieht sich Franz aber wohl auf das künftige Vorgehen.

Ich habe den TS so verstanden, dass er aus dem status quo eine Änderung der bereits vorhandenen Datensätze wünscht.


Viele Grüße
Maxel

jagger

@Maxel,

...und ich hatte vermutet, dass es Fakt ist, dass das Textfeld wegen der vielen Abfragen, nicht geändert werden soll.
Na wie auch immer, Hauptsache Werner Mader kommt damit klar.

LG und ein schönes WE
jagger

Maxel

Das Textfeld wird ja mittels UCase() nicht nachhaltig auf Abfragen und Verknüpfungen wirkend verändert, sofern Option Compare Database (Standard) gilt, sondern nur dessen optische Darstellung.

Auch Dir ein schönes WE!
Viele Grüße
Maxel

MzKlMu

Hallo,
man kann auch Stück für Stück nach den gezeigten Methoden von Philipp in #4 eine neue Tabelle anlegen mit den 3 neuen Feldern. Dann erstellt man eine Abfrage nimmt alle Felder (die alten und die neuen) auf. Speichert die Abfrage mit einem Namen und prüft. Wenn allse OK nennt man die alte Tabelle um und gibt der Abfrage mit den neuen Feldern den Namen der alten Tabelle.
In der neuen Abfrage legt man dann auch das zusammengesetzte Feld an, dem man den Feldnamen aus der alten Tabelle verpasst.
Dann sollte ohne weitere Änderungen der Rest der DB funktionieren.
Gruß Klaus

Werner Mader

Guten Abend und Danke für Eure Hilfe.
Ich habe die Lösung gefunden.

Der folgende Code wird einen professionellen VBA Programmierer wohl übelst zusetzen, aber es funktioniert.
Das Textfeld "Text15" habe zum probieren verwendet um zu sehen wie Access das umsetzt.

Code:
Refresh
Dim strAdresse As String
Dim strAdressere As String
    Dim intKommaPos As Integer
    Dim LowerCase, UpperCase
     
    intKommaPos = InStr(Wohnort & " ,", ",")
    strAdresse = Left(Wohnort, intKommaPos - 1)
    strAdressere = Right(Wohnort, Len(Wohnort) - InStrRev(Wohnort, ","))
    LowerCase = strAdresse
    UpperCase = UCase(LowerCase)
    Me.Text15 = UpperCase & "," & " " & strAdressere

So wird bei der Eingabe aus 9999 Testort, Teststrasse 5  als Ergebnis 9999 TESTORT, Teststrasse 5 produziert.
nochmals Danke für eure Überlegungen und Tipps.

PhilS

Zitat von: Maxel am März 29, 2019, 18:03:05
ZitatMit einer Aktualisierungsabfrage, einer neuen Auswahlabfrage als Abstraktionsebene und einem geeigneten Search&Replace-Tool, sollte das in weniger als 1 Std. machbar sein.
Er schreibt allerdings von unzähligen Abfragen/Verknüpfungen...
Deshalb der Hinweise auf ein Search&Replace Tool, um in den unzähligen Abfragen der Namen der Tabelle durch den Namen der neuen Abfrage, die die Struktur der Tabelle simuliert, zu ersetzen.


Ein solches Tool wäre z.B. Search&Replace von Rick Fisher. - Leider ist der Anbieter nicht mehr aktiv und man kann keine Lizenz mehr kaufen, aber die Trial-Version tut es für einen einmaligen Einsatz zur Not auch.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

MzKlMu

Hallo,
wenn man nach meinem Vorschlag in #11 verfährt, braucht es nur die neue Tabelle mit den 3 neuen Feldern.
Es sind dann keine weiteren Anpassungen mehr notwendig.
Gruß Klaus