Neuigkeiten:

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

Mobiles Hauptmenü

Typumwandlungsfehler beim Ersetzen in Textfeld

Begonnen von nurmikss, Februar 27, 2019, 18:40:37

⏪ vorheriges - nächstes ⏩

nurmikss

Hallo,

ich möchte in einem Textfeld überflüssige Einheiten und Leerzeichen entfernen, so dass
aus "110      cm x       30 cm x 30 cm"
der Eintrag "110 x 30 x 30" wird.
Überflüssig sind die "cm", weil in der Anwendung das Feld bereits die Bezeichnung "Maße (H x B x T) in cm" trägt.

In einem ersten Schritt wollte ich die "inneren" cm und überflüssigen Leerzeichen entfernen (die Funktion ersetzeRegEx ist unten reinkopiert):
UPDATE Tabelle1
SET Feld10 = ersetzeRegEx(Feld10," *cm *x *"," x ");

Dabei kommt die Fehlermeldung "Microsoft Access kann nicht alle Datensätze aktualisieren. ... hat 30 Felder wegen Typumwandlungsfehlern nicht aktualisiert. ...".

Woran kann das liegen ?
Die Änderungsabfrage ersetzt doch einen langen Text durch einen kürzeren Text - da wird doch der Feldtyp nicht betroffen, dachte ich mir.
Typische Feldinhalte sind "54 cm x 168 cm", "25 cm x 25 cm x 70 cm", "25 cm x 25 cm x 70 cm (B/T/H)" oder ca. 45 leere Felder.

Bitte keine Diskussion über Normalisierung - ich weiß, dass die drei Maße in drei verschiedenen Feldern besser aufgehoben wären.

Für die Funktion ist der Verweis auf "Microsoft VBScript Regular Expression x.x" gesetzt
Function ersetzeRegEx(Ausgangstext As String, Muster As String, Ersatz As String)
Dim regex As New RegExp
regex.Global = True
regex.Pattern = Muster
'Set fundstellen = regex.Execute(Ausgangstext)
ersetzeRegEx = regex.Replace(Ausgangstext, Ersatz)
End Function

Ich verwende Microsoft Office Professional plus 2010

ebs17

Zitatca. 45 leere Felder
Übergabe von NULL an eine Stringvariable, das gibt ein Ächzen. In VBA kann nur Variant Null aufnehmen.
Mit freundlichem Glück Auf!

Eberhard

nurmikss

Du denkst also, es liegt an diesen leeren Feldern ?
Ich weiß nicht, was an diese Felder übergeben wurde (meine Abfrage dürfte sie ja nicht verändert haben, weil das Suchmuster nicht passt).
Vielleicht waren sie beim Anlegen eines neuen Datensatzes leer gelassen worden oder man hat Inhalt durch die [DEL]- oder [Rück]taste wieder gelöscht.
Wie gesagt, Access kündigt 30 Typumwandlungsfehler an, aber es gibt 45 leere Felder - demnach müssten die ja auf verschiedene Art leer sein.
Ich habe immer noch nicht verstanden, warum überhaupt Typumwandlungsfehler auftreten. Denn wo ich "30 cm x 40 cm" durch  "30 x 40" ersetze, bleibt es bei einem Textfeld und wo nicht z.B. " cm x " drinsteht, sollte doch gar keine Änderung passieren, oder übersehe ich da was ?

Ich möchte nicht "Änderung trotzdem durchführen" anklicken, bevor ich ich nicht weiß, was dadurch verändert wird. Sonst wirken sich die Fehler in der Fachanwendung aus, in die ich die Daten reimportieren will.
Ich verwende Microsoft Office Professional plus 2010

ebs17

Zähle doch mal die Felder, die leer im Sinne von NULL und die leer im Sinne von Leerstring sind.

Sinnigerweise würde man Datensätze mit leeren Felder einfach weglassen (=> filtern):
WHERE Feld10 > ""
Mit freundlichem Glück Auf!

Eberhard

nurmikss

Ja, es lag an den leeren Feldern:
von den 45 leeren Feldern waren 30 = Null und 15 = "".

Die Änderungsabfrage mit Where Feld10 <> "" ging glatt durch.
Ich verwende Microsoft Office Professional plus 2010

ebs17

> "" versus <> ""
Welche Werte kleiner Leerstring hast Du und musst Du gezielt ausschalten?
Mit freundlichem Glück Auf!

Eberhard

nurmikss

Ist NULL in der Sortierfolge kleiner oder größer als ein Leerstring ?
Ich verwende Microsoft Office Professional plus 2010