Access VBA - Umlaute replacen und Zeichen begrenzen
Access 2007 SP3
Ich bin kein professioneller Entwickler
Hallo in die Runde,
ich bastele gerade an ner kleinen Benutzerverwaltungsdatenbank.
Hierzu habe ich eine User-Tabelle erstellt, in welcher das "username"-Feld auf 20 Zeichen begrenzt ist.
Im Formular trägt man dann Vor- & Nachnamen in Textfelder (txt_first_name & txt_last_name) ein.
Nach dem LostFocus des txt_last_name werden die Werte der beiden Textfelder in der Textbox txt_Username verkettet und die Anfangsbuchstaben der Namen von Groß- in Kleinschreibung geändert.
Daraufhin wird der Inhalt der Textbox auf Umlaute überprüft und die Gefundenen, mit Vokalen ersetzt.
Wenn der Username nun größer 20 ist, wirft die Runtime Fehler aus.
Bei genau 21 Zeichen:
Run-time-error '3163'
The field is too small to accept the amount of data you attempted to add. Try inserting or pasting less data.
Bei mehr als 21 Zeichen:
Run-time-error '-2147352567 (80020009)':
The field is too small to accept the amount of data you attempted to add. Try inserting or pasting less data.
Daraufin habe ich versucht den Fehler abzufangen. Tritt ein Fehler auf, wird die Zeichenkette auf 20 Zeichen reduziert und der oben erklärte Vorgang wiederholt. Leider war das wohl nix.
Ist die Kette nun größer 20 geschieht halt leider gar nichts.
Hier der Code:
Ich denke ich liege nicht falsch mit der Vermutung, hier einiges durcheinander gebracht zu haben.
Könnt ihr mir etwas unter die Arme greifen?
Freue mich über jede Rückmeldung
LG Tray
Ich bin kein professioneller Entwickler
Hallo in die Runde,
ich bastele gerade an ner kleinen Benutzerverwaltungsdatenbank.
Hierzu habe ich eine User-Tabelle erstellt, in welcher das "username"-Feld auf 20 Zeichen begrenzt ist.
Im Formular trägt man dann Vor- & Nachnamen in Textfelder (txt_first_name & txt_last_name) ein.
Nach dem LostFocus des txt_last_name werden die Werte der beiden Textfelder in der Textbox txt_Username verkettet und die Anfangsbuchstaben der Namen von Groß- in Kleinschreibung geändert.
Daraufhin wird der Inhalt der Textbox auf Umlaute überprüft und die Gefundenen, mit Vokalen ersetzt.
Wenn der Username nun größer 20 ist, wirft die Runtime Fehler aus.
Bei genau 21 Zeichen:
Run-time-error '3163'
The field is too small to accept the amount of data you attempted to add. Try inserting or pasting less data.
Bei mehr als 21 Zeichen:
Run-time-error '-2147352567 (80020009)':
The field is too small to accept the amount of data you attempted to add. Try inserting or pasting less data.
Daraufin habe ich versucht den Fehler abzufangen. Tritt ein Fehler auf, wird die Zeichenkette auf 20 Zeichen reduziert und der oben erklärte Vorgang wiederholt. Leider war das wohl nix.
Ist die Kette nun größer 20 geschieht halt leider gar nichts.
Hier der Code:
Private Sub txt_last_name_LostFocus()
On Error GoTo UmlautProb
txt_last_name = UCase(Left(txt_last_name, 1)) & LCase(Mid(txt_last_name, 2))
txt_Username = LCase(txt_first_name.Value & txt_last_name.Value)
txt_Username.Value = Replace(txt_Username.Value, "ä", "ae")
txt_Username.Value = Replace(txt_Username.Value, "ö", "oe")
txt_Username.Value = Replace(txt_Username.Value, "ü", "ue")
txt_Username.Value = Replace(txt_Username.Value, "Ä", "Ae")
txt_Username.Value = Replace(txt_Username.Value, "Ö", "Oe")
txt_Username.Value = Replace(txt_Username.Value, "Ü", "Ue")
txt_Username.Value = Replace(txt_Username.Value, "ß", "ss")
UmlautProb:
Select Case Err.Number
Case 3163:
'If Len(txt_Username.Value) > 20 Then
Dim s1 As String
Dim s2 As String
s1 = txt_Username.Value
s2 = Left(s1, 20)
txt_Username.Value = s2
txt_last_name = UCase(Left(txt_last_name, 1)) & LCase(Mid(txt_last_name, 2))
txt_Username = LCase(txt_first_name.Value & txt_last_name.Value)
txt_Username.Value = Replace(txt_Username.Value, "ä", "ae")
txt_Username.Value = Replace(txt_Username.Value, "ö", "oe")
txt_Username.Value = Replace(txt_Username.Value, "ü", "ue")
txt_Username.Value = Replace(txt_Username.Value, "Ä", "Ae")
txt_Username.Value = Replace(txt_Username.Value, "Ö", "Oe")
txt_Username.Value = Replace(txt_Username.Value, "Ü", "Ue")
txt_Username.Value = Replace(txt_Username.Value, "ß", "ss")
'End If
'Exit Sub
End Select
End Sub
Ich denke ich liege nicht falsch mit der Vermutung, hier einiges durcheinander gebracht zu haben.
Könnt ihr mir etwas unter die Arme greifen?
Freue mich über jede Rückmeldung
LG Tray
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 181630
Url: https://administrator.de/contentid/181630
Ausgedruckt am: 08.11.2024 um 07:11 Uhr
2 Kommentare
Neuester Kommentar
Hi Tray,
ich würds einfach so machen.
mfg
n4426
ich würds einfach so machen.
Private Sub txt_last_name_LostFocus()
'Nachname Formatieren
Me.Nachname = UCase(Left(Me.Nachname, 1)) & LCase(Mid(Me.Nachname, 2))
'Vorname Formatieren
Me.Vorname = UCase(Left(Me.Vorname, 1)) & LCase(Mid(Me.Vorname, 2))
'Username ermitteln
Dim varUsername As String
varUsername = LCase(Me.Vorname & "." & Me.Nachname)
varUsername = Replace(varUsername, "ä", "ae")
varUsername = Replace(varUsername, "ö", "oe")
varUsername = Replace(varUsername, "ü", "ue")
varUsername = Replace(varUsername, "Ä", "Ae")
varUsername = Replace(varUsername, "Ö", "Oe")
varUsername = Replace(varUsername, "Ü", "Ue")
varUsername = Replace(varUsername, "ß", "ss")
'Username auf max. 20 Zeichen kürzen (wenn notwendig)
Me.username = Left(varUsername, 20)
End Sub
mfg
n4426