April 18, 2021, 00:32:47

Neuigkeiten:

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


Unterschiedliche Schreibweise in Abfrage

Begonnen von uwe01, Februar 03, 2021, 09:16:56

⏪ vorheriges - nächstes ⏩

uwe01

Hallo Leute,
ich habe ein Problem bei einer Abfrage.
Es werden Daten von einer Verknüpften Excel Datei in Access Eingelesen.
Darin sind Fahrzeugkennzeichen in Unterschiedlicher Schreibweise enthalten, mal wird das Kennzeichen mit Bindestrich und mal ohne Geschrieben. Wenn ich jetzt die Abfrage erstelle und nach Kennzeichen ohne Bindestrich suche werden natürlich die Kennzeichen mit Bindestrich nicht mit Angezeigt. Wenn dann der Anwender nicht weiß wie bei einigen Fahrzeuge die Schreibweise ist, werden ihm leider die anderen nie angezeigt.
Wie kann ich die Abfrage erstellen das es egal wie das Kennzeichen eingegeben wird, und die Abfrage dennoch zum Erfolg führt.
Gruß Uwe01
Win XP neu Win 10, Access 2002/2013
Bitte um Verständliche Antworten !

steffen0815

Hallo,
da hilft nur die Schreibweise zu vereinheitlichen.
Entweder direkt in der Tabelle oder im Rahmen eines neuen Abfragefeldes.
Bei beiden dürfte das Entfernen der Bindestriche (Replace) die einfachste Lösung sein.
Gruß Steffen

uwe01

Hallo Steffen,
Danke für die schnelle Antwort, aber eine Änderung der Eingangstabelle ist leider nicht möglich. Wie meintest du mit dem neuen Abfragefeldes. Kannst du dass mal genauer Erklären?
Gruß Uwe01
Win XP neu Win 10, Access 2002/2013
Bitte um Verständliche Antworten !

steffen0815

Hallo,
>>Es werden Daten von einer Verknüpften Excel Datei in Access Eingelesen.
Heißt Einlesen = Importieren?
Wieso kannst du nicht bei diesem Einlesen die Werte vereinheitlichen?

Ansonsten gilt für beide Varianten:
ZitatNeuesFeld:replace([AltesFeld];"-";"")

>>Wenn ich jetzt die Abfrage erstelle ...
Wie sieht der SQL-Code dieser Abfrage aus?
Gruß Steffen

uwe01

Hallo Steffen,

ja die Tabelle wird Importiert.
Das mit replace klappt, jetzt habe ich aber noch festgestellt das bei einige Kennzeichen die Zahlen ohne Leerzeichen hinter den Buchstaben vorliegen. Hast du da eventuell auch eine Idee wie man das bei der Abfrage berücksichtigen kann. Ich hatte schon bei deinem Vorschlag noch 2xGänsefüßen versucht aber da erhalte ich ein Fehler. 
Gruß Uwe01
Win XP neu Win 10, Access 2002/2013
Bitte um Verständliche Antworten !

steffen0815

Hallo,
dann wird das Ganze etwas komplizierter. Da muss man wohl eine eigene Funktion erstellen (nur mal auf die Schnelle):Function fncFormatKFZ(kenn) As String
Dim i As Integer, t1 As String, t2 As String, t3 As String

On Error GoTo Fehler
' Ziel <kreis>-<buchstaben> <zahlen>

If Nz(kenn) = "" Then Exit Function

t1 = UCase(kenn) ' Großbuchstaben

' bis zum ersten nicht Buchstaben
For i = 1 To Len(t1)
    If Asc(Mid(t1, i, 1)) < Asc("A") Or _
        Asc(Mid(t1, i, 1)) > Asc("Z") Then Exit For
Next
t2 = Mid(t1, i)
t1 = Mid(t1, 1, i - 1)


' bis zum ersten Buchstaben oder Zahl
For i = 1 To Len(t2)
    Select Case Mid(t2, i, 1):
        Case "0" To "9": Exit For
        Case "A" To "Z": Exit For
    End Select
Next
t2 = Mid(t2, i)

If Left(t2, 1) Like "[A-Z]" Then
    ' bis zum ersten nicht Buchstaben
    For i = 1 To Len(t2)
        If Asc(Mid(t2, i, 1)) < Asc("A") Or _
            Asc(Mid(t2, i, 1)) > Asc("Z") Then Exit For
    Next
    t3 = Mid(t2, i)
    t2 = Mid(t2, 1, i - 1)
Else
    t3 = t2
    t2 = ""
End If

' bis zur ersten zahl
For i = 1 To Len(t3)
    If Asc(Mid(t3, i, 1)) >= Asc("0") And _
        Asc(Mid(t3, i, 1)) <= Asc("9") Then Exit For
Next
t3 = Mid(t3, i)
' bis zur letzten zahl
For i = 1 To Len(t3)
    If Asc(Mid(kenn, i, 1)) < Asc("0") Or _
        Asc(Mid(kenn, i, 1)) > Asc("9") Then Exit For
Next
t3 = Mid(t3, i)

If t2 = "" Then
    fncFormatKFZ = t1 & "-" & t3
Else
    fncFormatKFZ = t1 & "-" & t2 & " " & t3
End If
Exit Function
Fehler:
    fncFormatKFZ = "#FEHLER#"
End Function

Zitat von: Direktfenster?fncFormatKFZ("axx123")
AXX-123
?fncFormatKFZ("axx-123")
AXX-123
?fncFormatKFZ("axx 123")
AXX-123
?fncFormatKFZ("axx-j-123")
AXX-J 123
?fncFormatKFZ("axx j-123")
AXX-J 123
?fncFormatKFZ("axx")
AXX-
?fncFormatKFZ("123")
-

Prinzipiell ist das eher was für regex  :)
Gruß Steffen

uwe01

Hallo Steffen,

sieht ja sehr aufwändig aus dein VBA Code den müßte ich dann bestimmt als Modul Speichern und wie müßte ich ihn aufrufen. Jetzt habe ich mal rum experimentiert und habe eine neue Tabellenerstellungsabfrage mit deiner
"Ersetzen" Formel erstellt. Jetzt hat man das Kennzeichen schonmal ohne Bindestrich, was jetzt aber noch bleibt ist halt das Problem das es kein leerzeichen hinter den Buchstaben gibt.
Alte schreibweise des Kennzeichen X-XX123 wurde durch die Ersetzen Abfrage in X XX123 geändert ich bräuchte aber Kennzeichen in X XX 123.
Geht sowas nicht auch mit einer Abfrage?
Gruß Uwe01
Win XP neu Win 10, Access 2002/2013
Bitte um Verständliche Antworten !

steffen0815

Hallo,
>> Geht sowas nicht auch mit einer Abfrage?
Es geht auch weiterhin über eine Abfrage, allerdings mit einer benutzerdefinierten (statt Standard) Funktion.

Erstelle ein neues Modul. Kopiere den Code hinein. Benenne das Modul "modKFZ".

In der Abfrage dannNeuesFeld:fncFormatKFZ([AltesFeld])
Gruß Steffen

uwe01

Februar 03, 2021, 20:22:12 #8 Letzte Bearbeitung: Februar 03, 2021, 20:32:13 von uwe01
Hallo Steffen,

ersteinmal vielen Dank für deine Hilfe und deine Gedult,

habe deinen ersten VBA Code als Modul mit den Namen KFZ gespeichert. Danach den anderen Code in eine Abfrage erstellt. Wenn ich nun die Abfrage starte erhalte ich immer eine Fehler Meldung.
Was mache ich da nur Falsch?
Gruß Uwe01
Win XP neu Win 10, Access 2002/2013
Bitte um Verständliche Antworten !

steffen0815

Februar 03, 2021, 20:39:35 #9 Letzte Bearbeitung: Februar 03, 2021, 20:44:24 von steffen0815
Hallo,
Zitat von: undefinedhabe deinen ersten VBA Code als Modul mit den Namen KFZ gespeichert.
Laut Fehlermeldung hast du das mehrmals gemacht.


Btw:
Zitat von: SteffenBenenne das Modul "modKFZ"
Zitat von: Uweals Modul mit den Namen KFZ gespeichert
Was hat dir an meinem Namensvorschlag nicht gefallen?
Gruß Steffen

uwe01

Hallo,
ja hattest recht, ich hatte da irgenwie noch was im Speicher. Habe die DB noch einmal neu gestartet und siehe da es geht. Habe jetzt nur wieder den Bindestrich im Kennzeichen. Oder muss ich da erst die andere Abfrage ausführen damit der Bindestrich nicht mehr ist, un danach die andere.
Ist das Wort in Klammern (Kenn) der Feldnahme in deinem VBA Code, ist ja nur damit ich den Code verstehen kann und falls ich ihn ändern will.
Ich Danke dir für deine Hilfe und deine Geduld.
Gruß Uwe01
Win XP neu Win 10, Access 2002/2013
Bitte um Verständliche Antworten !

steffen0815

Hallo,
ZitatHabe jetzt nur wieder den Bindestrich im Kennzeichen.
Den aber einheitlich. Wenn du diesen nicht willst, passe den Code an:
Alt:If t2 = "" Then
    fncFormatKFZ = t1 & "-" & t3
Else
    fncFormatKFZ = t1 & "-" & t2 & " " & t3
End If

Neu:If t2 = "" Then
    fncFormatKFZ = t1 & " " & t3
Else
    fncFormatKFZ = t1 & " " & t2 & " " & t3
End If

ZitatIst das Wort in Klammern (Kenn) der Feldname in deinem VBA Code
Nein das ist ein frei gewählter Variablenname.
Gruß Steffen

uwe01

Hallo Steffen,
Danke dir für deine Hilfe, jetzt läuft alles.
Finde leider den Danke und Gelöst Batten nicht.
Gruß Uwe01
Win XP neu Win 10, Access 2002/2013
Bitte um Verständliche Antworten !