Hallo,

ich arbeite in einem Programm mit der SQLDA - Struktur um dynamisch SQL´s auszuführen.

Das funktioniert auch sehr gut, außer wenn ich eine SUM - Funktion im SQL verwende:

z.B. SELECT SUM(WERT) FROM TABELLE

Dann bekomme ich immer im SQLCOD den Fehlercode -822 zurück, ich weiß aber nicht so recht warum.


Die Programmvariablen weiße ich folgendermaßen zu:

Beim FETCH (exec sql FETCH NEXT FROM C1 USING DESCRIPTOR :SQLDA) kommt es dann immer zum -822 Fehler.

Die SUM-Felder sind vom SQLTYP 485.

ein COUNT(*) funktioniert z.B., nur der SUM mag nicht

Irgendwer eine Idee?



Code:
   

     D alpha           s           4096A   inz dim(999)
     D timestamp       s               Z   inz dim(999)
     D packedDec       S             31p 9 inz dim(999)
     D zonedDec        s             31s 9 inz dim(999)
     D integer         s              8B 0 inz dim(999) 




     for index = 1 to SQLD;
          SQLVAR = SQL_VAR(index);

         select;
          when SQLTYPE = 484 or SQLTYPE = 485; //Packed
            SQLDATA = %addr(packedDec(index));
            #MSQLL(index) = SQLLEN;
            SQLLEN = (256*%len(packedDec(index))) + %decpos(packedDec(index));
          when SQLTYPE = 488 or SQLTYPE = 489; //Zoned
            SQLDATA = %addr(zonedDec(index));
            #MSQLL(index) = SQLLEN;
            SQLLEN = (256*%len(zonedDec(index))) + %decpos(zonedDec(index));
          when SQLTYPE = 392 or SQLTYPE = 393; //Timestamp
            SQLDATA = %addr(timestamp(index));
            #MSQLL(index) = SQLLEN;
            SQLLEN = %len(timestamp(index));
          when SQLTYPE = 496; //Integer
            SQLDATA = %addr(integer(index));
            #MSQLL(index) = SQLLEN;
          other;
            SQLDATA = %addr(alpha(index));
            #MSQLL(index) = SQLLEN;
            SQLLEN = %len(alpha(index));
         endsl;

          #FLDS($CF) = %trimr(SQLNAME);
          $CF = $CF+1;

          SQL_VAR(index) = SQLVAR;
        ENDFOR;