chrisssiie
05-09-16, 12:48
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?
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;
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?
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;