PDA

View Full Version : Suchen nach Umlauten



Seiten : 1 [2] 3 4 5 6

chs
29-03-10, 09:31
was die parameter betrifft gibt es hier einen netten link der dir für die zukunft helfen könnt.
myCSharp.de - DIE C# und .NET Community | Artikel | [Artikelserie] Parameter von SQL Befehlen (http://www.mycsharp.de/wbb2/thread.php?threadid=66704)

nur als info: ich hab CA V5R4 am PC installiert und kann via ODBC sowohl mit einer AS/400 V5R4 als auch V5R3 mit umlauten arbeiten.

Im Quellcode der Applikation tun wir das natürlich, aber was hat das mit dem Select zu tun.

Der Select, wie er abgesetzt wird, ist reines SQL, wie man ihn eintippen würde.

chs
29-03-10, 09:53
Auf der iSeries, auf der die DB läuft ist Folgendes eingestellt:

Language ID= ENU
Codepage=37

Ist das irgendwie relevant?

andreaspr@aon.at
29-03-10, 09:59
Im Quellcode der Applikation tun wir das natürlich, aber was hat das mit dem Select zu tun.

Der Select, wie er abgesetzt wird, ist reines SQL, wie man ihn eintippen würde.

es hat was mit security und kompatibilität zu tun, da die parameter die werte schon entsprechend richtig umkonvertieren.
und da du den part mit dem "?" nicht verstanden hast, hab ich dir den link geschickt.

Fuerchau
29-03-10, 10:01
Ja natürlich, dann wird versucht, die Umlaute in 037 zu konvertieren.
Jetzt kommt es darauf an, auf welcher CCSID die 5250-Sitzungen eingestellt sind.
Stehen die z.B. auf 273 hast du ein großes Problem.

In diesem Fall musst du die Felder auf die passende CCSID casten:

cast(Feld as char(nn) ccsid 273) = 'Nü'

Wichtig ist, dass das System auf die Primärsprache eingestellt ist und auch die Job's und DB passend auf die Sprache bzw. 5250-Hostcodepage gestellt werden.
Dann klappts auch mit dem ODBC.

chs
29-03-10, 10:14
Ja natürlich, dann wird versucht, die Umlaute in 037 zu konvertieren.
Jetzt kommt es darauf an, auf welcher CCSID die 5250-Sitzungen eingestellt sind.
Stehen die z.B. auf 273 hast du ein großes Problem.

In diesem Fall musst du die Felder auf die passende CCSID casten:

cast(Feld as char(nn) ccsid 273) = 'Nü'

Wichtig ist, dass das System auf die Primärsprache eingestellt ist und auch die Job's und DB passend auf die Sprache bzw. 5250-Hostcodepage gestellt werden.
Dann klappts auch mit dem ODBC.

Also jetzt hast du mich verloren.

Was hat die 5250 Emulation mit einem ODBC Zugriff zu tun?

Welche Spracheinstellungen meinst du? Der Client und die AS/400 sind auf Englisch (US) eingestellt.

Was genau sollte ich auf welcher Maschine ändern? Oder wie kann ich herausfinden ob das wirklich das Problem ist.

Macht es Sinn den ODBC Treiber für Windows zu installieren 9.7 oder so? Oder wird der mit der iSeries nicht funktionieren?

chs
29-03-10, 10:27
Hier vielleicht nochmal der Select zum Verständnis mit dem wir jetzt testen.
Ich tippe den Select in ein ODBC Tool ein.

Funktioniert:
Select * from SENDUNG where FELD = 'Nuernberg'

Funktioniert nicht:
Select * from SENDUNG where FELD = 'Nürnberg'

Interessanterweise geht ja der Insert und der Update mit dem Umlaut. Nur der Umlaut in der where Clause verursacht das Problem.

Frage: Wie kann man auf der iSeries sehen, welcher Select dort ankommt?

andreaspr@aon.at
29-03-10, 10:57
hast du schon den Cast probiert, wie fürchau beschrieben hatte?
cast(Feld as char(nn) ccsid 273) = 'Nü'
wenn es dann funktioniert, hast du definitiv ein problem mit den CCSIDs und du brauchst nicht lang weiter suchen.

vlt. musst du auch die Language-ID in deiner ODBC-einstellung anpassen, wenn die DB mit ENU fährt.

chs
29-03-10, 11:01
hast du schon den Cast probiert, wie fürchau beschrieben hatte?
cast(Feld as char(nn) ccsid 273) = 'Nü'
wenn es dann funktioniert, hast du definitiv ein problem mit den CCSIDs und du brauchst nicht lang weiter suchen.

vlt. musst du auch die Language-ID in deiner ODBC-einstellung anpassen, wenn die DB mit ENU fährt.

Ja - das habe ich wie folgt probiert:

Select * from SENDUNG where cast(FELD as char(50) ccsid 273) = 'Nürnberg'

Gleiches Verhalten. Kein Response von der Datenbank und mann muss den Job auf AS/400 Seite beenden.

Aber woher kommt die 273? Woher weiss ich dass die korrekt ist?
Wenn ich das weiss, könnte ich diese Codepage doch im ODBC Treiber angeben oder nicht?

Wo stelle ich im ODBC eine Language-ID ein?

Fuerchau
29-03-10, 11:37
Dann probier doch folgendes:

Select * from SENDUNG where cast(FELD as char(nn) ccsid 273) = 'Nürnberg'

wobei nn die originale Feldlänge ist.

Fuerchau
29-03-10, 11:45
273 ist Deutsch.

Nochmal:
Welche Hostcodepage wird in den 5250-Sitzungen verwendet ?

Ansonsten wird wohl nichts helfen, als die V5R4-version des CA zu installieren.
Irgendwie verhält sich wohl die V6 inkompatibel zu V5R3.