J'ai écrit un programme en format libre RPG IV et j'ai rencontré un problème. Im essayant d'exécuter sql statment avec:RPG exec sql ne fonctionne qu'une seule fois
dcl-proc getRecord;
dcl-pi *N int(5) end-pi;
dcl-s rec int(5) inz(0);
exec sql
select max(SCORE) into :rec from SNK_HISC;
return rec;
END-PROC;
Cela ne fonctionne qu'une seule fois après la compilation. Peut-être que je devrais réinitialiser certains indicateurs ou indicateurs sql? A la fin du programme, je l'utilise:
*inlr = *on;
return;
Où procédure est appelée:
exfmt BACK;
exfmt INFO;
inital();
dow run and alive;
write MAINBOARD;
READ(E) AKE_DSP;
run = FKeyListener();
alive = goForward();
ENDDO;
LSCORE = points;
if points > getRecord();
LRECORD = 'NEW RECORD!';
exec sql
insert into AKE_HISC(USID , SCORE) VALUES(:userID , :points);
ENDIF;
exfmt ENDING;
*inlr = *on;
return;
Et dans cette procédure:
dcl-proc inital;
snake(1).x = 5;
snake(2).x = 5;
snake(3).x = 5;
snake(1).y = 5;
snake(2).y = 6;
snake(3).y = 7;
direction.x = 1;
direction.y = 0;
SCORE = points;
RECORD = getRecord();
genSnack();
refresh();
END-PROC;
Je lance le programme avec ce programme CL:
PGM
MONMSG MSGID(CPF0000 MCH0000) EXEC(GOTO CMDLBL(END))
OVRDSPF FILE(AKE_DSP) DEV(*REQUESTER) WAITRCD(1)
CALL PGM(AKE_S)
END:
DLTOVR FILE(*ALL)
MONMSG MSGID(CPF0000)
ENDPGM
Que voulez-vous dire par «ça ne marche qu'une fois»? Pouvez-vous montrer vos instructions 'Ctl-Opt', et votre appel de procédure à getRecord? Cela fonctionne-t-il de nouveau si vous vous déconnectez de votre session et vous connectez? – Dam
Maintenant, je n'ai pas accès à mon ibmi jusqu'à lundi alors maintenant je ne peux pas le vérifier. Mais cela ne fonctionne correctement qu'une seule fois après la compilation. Deuxième exécution du programme doent insérer les données restantes dans la variable rec. J'utilise ctl-opt noactgrp ou quelque chose comme ça. – Silver
ce que "les données restantes"? – Charles