2017-08-18 2 views
-2

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 
+0

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

+0

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

+0

ce que "les données restantes"? – Charles

Répondre

0

Le problème n'était pas avec sql query mais avec ça là où c'est. J'ai enlevé la procédure getRecord() et fait rec la variable globale et la requête SQL a été placée dans le cycle principal c'est tout.