[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Apr 2005
    Beiträge
    73

    Daten aus QAOKP09A lesen

    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

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    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.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Apr 2005
    Beiträge
    73
    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

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    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.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  5. #5
    KM is offline [professional_User]
    Registriert seit
    Apr 2003
    Beiträge
    1.005
    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

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    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.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  7. #7
    Registriert seit
    Mar 2002
    Beiträge
    5.286
    Zitat Zitat von Fuerchau Beitrag anzeigen
    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
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  8. #8
    KM is offline [professional_User]
    Registriert seit
    Apr 2003
    Beiträge
    1.005
    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

  9. #9
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    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?
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  10. #10
    Registriert seit
    Nov 2003
    Beiträge
    2.304
    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.

    Zitat Zitat von hteufl Beitrag anzeigen
    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.

  11. #11
    Registriert seit
    Mar 2002
    Beiträge
    5.286
    Zitat Zitat von Fuerchau Beitrag anzeigen
    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?
    ... wenn denn die Daten alle mit derselben Kodierung in dem 65535 Feld gelandet sind:
    - oBdA sei die CCSID mit xxx benannt und das Feld sei yyy und die Länge zzz, dann
    cast(yyy as char(zzz) ccsid xxx) (keine Wandlung weil 65535 beteiligt, Feld hat jetzt xxx
    mit dem nächsten cast kann ich das Feld dann wandeln in was immer ich will, wenn ich also aaa haben will
    cast(cast(yyy as char(zzz) ccsid xxx) as char(zzz) ccsid aaa)

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

Similar Threads

  1. Excel in db/400 lesen
    By dibe in forum IBM i Hauptforum
    Antworten: 10
    Letzter Beitrag: 16-01-15, 09:22
  2. Antworten: 11
    Letzter Beitrag: 11-07-14, 11:32
  3. CDs für AS/400 brennen und lesen
    By HelgeNielsen in forum IBM i Hauptforum
    Antworten: 12
    Letzter Beitrag: 23-04-02, 16:40
  4. Antworten: 3
    Letzter Beitrag: 25-02-02, 23:27
  5. AS/400 QIC-2GB Tape lesen
    By chr in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 01-02-01, 12:00

Tags for this Thread

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •