PDA

View Full Version : Daten aus QAOKP09A lesen



Seiten : [1] 2

hteufl
11-04-17, 09:10
Hallo,

ich möchte aus den Directory-Einträgen Daten für eine Applikation auslesen. Unter anderem wäre das der Vorname und der Familienname. Leider werden beim Lesen der Datei QAOKP09A die Umlaute nicht korrekt dargestellt. Ein Ö wird zu \ und ein Ü wird zu [ usw.
Gibt es eine Möglichkeit die Daten korrekt aus QAOKP09A zu lesen?

Danke im Voraus

Hermann TEUFL

Fuerchau
11-04-17, 09:33
Da diese Datei wohl noch nicht "modernisiert" ist, die Datei als auch die Felder noch keine CCSID enthalten, sind diese Daten als Binärdaten zu interpretieren. Es erfolgt also keinerlei Umsetzung der Daten in eine andere CCSID.
Nun liegt es also an den Terminals, mit welcher CCSID (Hostcodepage) die Datenerfassung erfolgte.
Das Auslesen klappt dann leider nur, wenn der Job mit derselben CCSID läuft, in der die Erfassung erfolgte.
Nun kommt es noch darauf an, wohin du die Daten stellst um die korrekte Codewandlung durchzuführen.

hteufl
11-04-17, 10:15
Hallo Fuerchau!

Vielen Dank für deine Antwort! Wir haben eine Applikation laufen die automatisch E-Mails an Kunden versendet (QTMMSENDMAIL). Die Darstellung des E-mails ist soweit OK nur bei der Zieladresse würde ich gerne Familienname Vorname <Mailadresse> eintragen. Bei Kunden mit Umlauten im Familiennamen oder Vornamen werden die Daten nicht korrekt dargestellt.
D.h. ich müsste die Datei in RPG lesen und in eine IFS Datei korrekt ausgeben können.


Danke
Hermann

Fuerchau
11-04-17, 10:47
Wenn du deinen Job auf CCSID 273/1141 und dein Terminal ebenso auf 273/1141 stellst, solltest du die Daten korrekt mit z.B. RUNQRY/STRSQL sehen können.
Ist das der Fall, solltest du deinen Job halt auf 273/1141 stellen um dann das API mit den korrekten Daten zu befeuern.
Ansonsten musst du mal klären, mit welcher Terminal-Codepage die Daten erfasst wurden und dies ggf. mit einem 273/1141-Terminal überarbeiten.

Das Hauptproblem ist immer wieder, dass QCCSID auf dem Default 65535 belassen wird anstatt diesen korrekt zur Sprache einzustellen.

KM
11-04-17, 11:30
Probier doch mal folgendes aus:

select cast(wok9srcl as char(40) ccsid 037) from qusrsys.QAOKP09A

Die Feldinhalte scheinen mit CCSID 037 geschrieben worden zu sein.

Gruß,
KM

Fuerchau
11-04-17, 12:30
Das wird nichts bringen, da ein cast von Binär nach CCSID nnn keine Codewandlung vornimmt.
Die Ursache liegt bei C-API's eben häufig daran, dass bei fehlender Job-CCSID dann 037 angenommen wird. In diesem Fall muss ja für das Mail-API von EBCDIC in ASCII umgewandelt werden.
Wenn aber weder Datei noch Job eine CCSID aufweisen schlagen hier eben Defaults zu.

Wir hatten hier aber auch noch einen anderen Fall (C-Api RegEx), dass eine Locale im Job gesetzt sein muss, damit das C-Api korrekt umsetzt.

BenderD
11-04-17, 14:27
Das wird nichts bringen, da ein cast von Binär nach CCSID nnn keine Codewandlung vornimmt.

... der erste cast bringt nix, aber der nächste. (Ist bei einem Cast 65535 als Quelle oder Ziel dabei wird transparent übertragen, aber das Ergebnis des Cast hat die Ziel CCSID)

D*B

KM
11-04-17, 14:41
Warum soll das nichts bringen?

Sowohl...
select cast(wok9srcl as char(40) ccsid 037) from qusrsys.QAOKP09A

als auch...
select cast(cast(wok9srcl as char(40) ccsid 037) as char(40) ccsid 1208) from qusrsys.QAOKP09A

bringt bei mir das gewünschte Ergebnis. Einmal in CCSID 37 und einmal in UTF-8.

Gruß,
KM

Fuerchau
11-04-17, 14:53
CCSID 65535 => CCSID 037 = Keine Codewandlung, Daten sind nun CCSID 037
CCSID 273 => CCSID 037 = Mit Codewandlung, Daten sind nun CCSID 037
CCSID nnn <> 65535 => CCSID mmm <> 65535 = Mit Codewandlung!

Generell sei also nochmal gesagt:
Zwischen CCSID *HEX (65535) und irgend was anderem erfolgt generell keine Codewandlung!

Daher gibt es ja laufend die Probleme:
Terminal 1141 => Job 65535 => DB 273 = keine Codewandlung
Terminal 870 => Job 65535 => DB 273 = keine Codewandlung

Wie soll nun erkannt werden, ob die Daten der DB 1141 oder 870 sind?

Pikachu
11-04-17, 15:26
Sind das überhaupt die richtigen Felder?
In WOK9SRCL, WOK9SRCF, WOK9SRCM, WOK9SRCP stehen die Namen doch in Großbuchstaben.
Nimm besser WOK9FULL (Vollständiger Name, entsprechend pflegen) oder hol dir die Werte aus WOK9OPT.


ich möchte aus den Directory-Einträgen Daten für eine Applikation auslesen. Unter anderem wäre das der Vorname und der Familienname. Leider werden beim Lesen der Datei QAOKP09A die Umlaute nicht korrekt dargestellt. Ein Ö wird zu \ und ein Ü wird zu [ usw.