Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: nurmikss am Februar 27, 2019, 18:40:37

Titel: Typumwandlungsfehler beim Ersetzen in Textfeld
Beitrag von: nurmikss am Februar 27, 2019, 18:40:37
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

Titel: Re: Typumwandlungsfehler beim Ersetzen in Textfeld
Beitrag von: ebs17 am Februar 27, 2019, 20:03:06
Zitatca. 45 leere Felder
Übergabe von NULL an eine Stringvariable, das gibt ein Ächzen. In VBA kann nur Variant Null aufnehmen.
Titel: Re: Typumwandlungsfehler beim Ersetzen in Textfeld
Beitrag von: nurmikss am Februar 27, 2019, 21:44:30
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.
Titel: Re: Typumwandlungsfehler beim Ersetzen in Textfeld
Beitrag von: ebs17 am Februar 27, 2019, 22:04:31
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 > ""
Titel: Re: Typumwandlungsfehler beim Ersetzen in Textfeld
Beitrag von: nurmikss am Februar 28, 2019, 08:47:15
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.
Titel: Re: Typumwandlungsfehler beim Ersetzen in Textfeld
Beitrag von: ebs17 am Februar 28, 2019, 10:39:03
> "" versus <> ""
Welche Werte kleiner Leerstring hast Du und musst Du gezielt ausschalten?
Titel: Re: Typumwandlungsfehler beim Ersetzen in Textfeld
Beitrag von: nurmikss am Februar 28, 2019, 16:52:06
Ist NULL in der Sortierfolge kleiner oder größer als ein Leerstring ?