Hallo, mir wurde dieses Forum wärmstens ans Herz gelegt wenn es um Fragen rund um die as 400 geht. Ich bin noch relativ neu in der AS 400 Welt, SQL's programmiere ich aber schon "ewig".

Leider geht ein SQL in meinem Free RPG Programm nicht, Open funktioniert super, jedoch kein fetch. Fehlermeldungen findet Ihr in den Kommentaren direkt hinter dem SQL.

Ich habe den SQL einmal mit speziellen Feldern, und einmal mit * abgeschickt, beides mal unterschiedliche Fehlermeldungen.

Es geht hier hauptsächlich um die beiden Fehlermeldungen
a) Syntax von Datums-, Zeit- oder Zeitmarkenwert ungültig. SQLSTATE: 22007
b) Zeichenumsetzung zwischen CCSID 1208 und CCSID 65535. SQLSTATE: 57017

Wenn ihr den Code seht wisst ihr ev. schon was da schief geht. Es muss irgend eine Konvertierung im Fetch schiefgehen, da bin ich mir sicher, nur wie kann ich das beheben!?

Des weiteren Fehlt mir noch eine bessere Methode, Programmausgaben zu realisieren, beim dsply Befehl gibts nur 52 Zeichen und mann muss immer auf enter drücken. Aber das ist nicht mein Kernproblem.

Hinweis: im ACS läuft der SQL einwandfrei.

danke!

Code:
**free
  ctl-opt option(*nodebugio)  alwnull(*usrctl);


dcl-ds sysUserTable extname('QSYS2/USER_INFO') qualified;
END-DS;


dcl-s InsertErrSQLtext char(999);
dcl-s insertState char(6);
dcl-s testStr char(52);
dcl-s statSQL int(10);


//  exec sql DECLARE CUILoop CURSOR FOR
//        SELECT A.USER_NAME,
//         A.INITPGM,A.INITPGMLIB
//        FROM QSYS2.USER_INFO A
//        left join USRSTPR1 B on (A.USER_NAME = B.AUTHNAM)
//        where B.AUTHNAM is null Order by A.USER_NAME asc;
//  exec sql OPEN CUILoop;
  //Das ergebnis der Bildschirmausgabe:
//  DSPLY  Cursor CUILOOP eröffnet.
//  DSPLY
//  DSPLY  SQLSTATE: 00000
//  DSPLY  Syntax von Datums-, Zeit- oder Zeitmarkenwert ungült
//  DSPLY  ig.
//  DSPLY  SQLSTATE: 22007




  exec sql DECLARE CUILoop CURSOR FOR
        SELECT *
        FROM QSYS2.USER_INFO A
        left join USRSTPR1 B on (A.USER_NAME = B.AUTHNAM)
        where B.AUTHNAM is null Order by A.USER_NAME asc;
  exec sql OPEN CUILoop;
  //  Das ergebnis der Bildschirmausgabe:
//  DSPLY  Cursor CUILOOP eröffnet.
//  DSPLY
//  DSPLY  SQLSTATE: 00000
//  DSPLY  Zeichenumsetzung zwischen CCSID 1208 und CCSID 65535
//  DSPLY   ungültig.
//  DSPLY  SQLSTATE: 57017




  // SQL DEBUG START
  Exec SQL GET DIAGNOSTICS Condition 1 :InsertErrSQLtext = MESSAGE_TEXT;
  Exec SQL Get Diagnostics Condition 1 :insertState = RETURNED_SQLSTATE;
  statSQL = SQLCOD;
  testStr = %SUBST(InsertErrSQLtext:1:52);
  dsply testStr;
  testStr = %SUBST(InsertErrSQLtext:53:105);
  dsply testStr;
  testStr = %trim('SQLSTATE: '+insertState);
  dsply testStr;
  // SQL DEBUG END


  exec sql FETCH FROM CUILoop INTO :sysUserTable ;


  // SQL DEBUG START
  Exec SQL GET DIAGNOSTICS Condition 1 :InsertErrSQLtext = MESSAGE_TEXT;
  Exec SQL Get Diagnostics Condition 1 :insertState = RETURNED_SQLSTATE;
  statSQL = SQLCOD;
  testStr = %SUBST(InsertErrSQLtext:1:52);
  dsply testStr;
  testStr = %SUBST(InsertErrSQLtext:53:105);
  dsply testStr;
  testStr = %trim('SQLSTATE: '+insertState);
  dsply testStr;
  // SQL DEBUG END


  exec sql close CUILoop;


*INLR = *ON;