[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Sep 2015
    Beiträge
    20

    GRAPHIC-Feld im RPG

    Ich hab im Forum hier zu diesem Thema viele Informationen gefunden aber irgendwie ist der Groschen bei mir nicht gefallen. Vielleicht kann mir jemand sagen, wo der Haken ist :
    Ich hab mit RTVDIRINF ein Verzeichnis im IFs ausgelesen und will den Inhalt der Datei jetzt verarbeiten. Das gewünschte Feld ist QEZOBJNAM, Datenart GRAPHIC.
    Versuch 1 : mit Standard CCSID 65535 bei STRSQL : Select QEZJOBNAM from MYlib/Myfile -> lustige nicht lesbare Zeichen.
    Versuch 2 : CHGJOB CCSID(37) , STRSQL + gleicher select --> QEZJOBNAM in allen Sätzen lesbar.
    Versuch 3: CHGJOB CCSID(37) CALL MyPGM (Art = SQLRPGLE) unter V6
    C/exec sql
    C+ declare mainCursor Cursor
    C+ for
    C+ select qezobjnam as ONAME from mylib/myfile
    C/end-exec
    C/exec sql
    C+ open mainCursor
    C/end-exec
    C DOW SQLSTT = '00000'
    C/exec sql
    C+ fetch next from mainCursor
    c/end-exec
    C EVAL VGL_FLD = %SUBST(ONAME: 1: 8)

    QEZJOBNAM und ONAME sind leer.
    Was hab ich nicht verstanden?

    Bitte um Hilfe....

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Diese Felder sind als Unicode definiert.
    Wenn du dein RPGLE-Feld vom Typ "C" deklarierst kannst du direkt Unicode verarbeiten.
    037 ist ggf. nicht korrekt wenn du auf einem deutschen System arbeitest.

    Ansonsten sehe ich hier Begriffsdiskrepanzen:
    QEZOBJNAM versus QEZJOBNAM?

    Wenn du ein Unicodefeld im RPG in ein Zeichenfeld konvertieren willst, geht das normalerweise nur mit %CHAR(), zurück zu Unicode per %UCS2().
    Ggf. deklariert der Compiler das SQL-Feld als "C" (Siehe Spool) und macht einfach einen MOVE des SQL-Feldes in deine Variable.
    Dies geht so nicht.
    Dafür musst du dann schon in SQL das Unicodefeld per CAST(Unicodefeld as char(nn) ccsid 273) umwandeln.
    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
    Sep 2015
    Beiträge
    20
    Guten Morgen Fuerchau,
    Begriffsdiskrepanzen gibt es nur in der Nachricht, nicht im Programm. Das Feld heißt immer QEZOBJNAM. (Also tipp-Fehler meinerseits, tschuldigung)

    Die Umwandlungsliste des Programms weist das Feld als :
    1200 *VAR C 5 1030 QEZOBJNAM
    QEZOBJNAM C(512)
    VARYING(2)
    CCSID(13488) aus.
    Select ist jetzt so :
    select CAST(QEZOBJNAM as CHAR(512)) as oname
    from mylib/myfile
    CCSID auf 273 geändert-----Ergebnis wie vorher :
    bei STRSQL ONAME lesbar, im RPG ausgeführt ist das Feld leer.
    Bitte noch mal um Hilfe.

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Du hast da was vergessen:
    CAST(QEZOBJNAM as CHAR(512) ccsid 273)

    Schau dir mal im Compiler-Listing die generierte SQLnnnn-Variable an sowie den "Move" nach dem Fetch.
    Die Variable kannst du auch im Debugger ansehen.

    Wie hast du deine Hostvariable deklariert (Type C oder leer oder extern)?
    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
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    Wohin werden die gelesenen Felder überhaupt ausgegeben?
    Im Fetch in Deinem Beispiel ist nichts zu sehen.
    Bitte den Fetch mit Ausgabe-Feldern und den zugehörigen D-Bestimmungen für die Ausgabe-Felder angeben.
    Normalerweise konvertiert SQL schon richtig.
    Wenn Du im SQL einen expliziten CAST auf entweder VARCHAR(Länge) (in RPG LängeA Varying) oder VARGRAPHIC(Länge) CCSID 13488 machst (in RPG LängeC Varying), wird das Ganze auch korrekt konvertiert und in die RPG Variablen ausgegeben.

    CCSID 65535 läst sich meist nicht konvertieren.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  6. #6
    Registriert seit
    Sep 2015
    Beiträge
    20
    Hallo B.Hauser/Hallo Fuerchau
    jetzt tuts :-)
    ONAME S 1024C varying
    ....
    select CAST(QEZOBJNAM as CHAR(512) ccsid 273)
    ...
    fetch next from mainCursor into :ONAME
    ONAME ist lesbar gefüllt
    Vielen Vielen Dank...

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Wenn deine variable vom Typ C ist, ist der CAST im SQL überflüssig da das Quellfeld doch vom Typ C ist!
    Mir entzieht sich da, was du falsch machst.
    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

  8. #8
    Registriert seit
    Sep 2015
    Beiträge
    20
    Ich hab den CAST beim select jetzt wieder rausgenommen und QEZOBJNAM ist immer noch gefüllt.
    Liegt das Geheimnis vielleicht daran, dass ONAME nicht mehr im select als as-Feld
    sondern im fetch into angegeben ist ?

  9. #9
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Eine Umbenennung eines Feldes ist beim embedded SQL meist irrelevant.
    Sie ist halt nur bei "CTE" und "derived" Table zur Identifizierung nötig.
    Beim Fetch zieht ausschließlich die Reihenfolge der Felder zum Ergebnis-Select.
    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

Similar Threads

  1. darstellung num-feld
    By easchbac in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 20-02-15, 09:47
  2. SQL Datumsabfrage aus case Feld
    By mk in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 29-08-14, 09:24
  3. Subfile - Feld Anzeige
    By skywalker in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 12-02-14, 13:16
  4. Sql Summe Feld aus 2 Datensätzen
    By DEVJO in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 01-02-14, 15:22
  5. Zugriff auf Feldtyp GRAPHIC im RPG?
    By Dieter Bücken in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 23-10-02, 08:44

Tags for this Thread

Berechtigungen

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