2013-06-10 7 views
1

CRTBNDRPG에서 컴파일 된 다음 코드는 실행 중일 때 I/O가 하나뿐입니다.IBM i RPG 프로그램이 아무 것도하지 않음

내가 할 일은 - 우리 테이블에는 모두 8이라는 주문 번호가 있지만이 파일 하나에는 10이 들어 있습니다. 그래서 저는 2 개의 필드를 만듭니다. 8 개의 필드를 만들어야하는데 다른 하나는 괜찮습니다. 입니다. 이 작은 프로그램이 이륙하지 않는 이유는 무엇입니까? NOT %EOFTRUE하지만 %FOUNDFALSE입니다

FMFHHMH IF E    DISK          
F* output file               
FMFHHMHPK O A E    DISK          
D*EXTSHP   S    13 6         
D                  
C                  
C     READ  MFHHMH         
C     Dow  NOT %EOF(MFHHMH)       
C     iF  %found         
c     MOVE  MHORDR  MHORDp      
c     MOVE  MHZONE  MHZONE      
C     WRITE  MFHHMHP         
C     READ  mfhhmh         
C     End            
C     END            
C     SETON          LR 
+2

명령 그룹을 종료 단지'END'를 사용하지 마십시오 대신 특정 최종 명령을 사용 (* whateveryouwant이 MFHHMH에서 선택) ENDIF, ENDDO 등. –

답변

12

당신은 무한 루프를 만들었습니다.

%FOUND에 대한 설명서는 READ 작업의 상태를 반영하지 않습니다.

DOW 루프가 레코드를 확보하기에 충분하므로 코드에 조건부가 필요하지 않습니다.

3

그것은 %가 발견하는 경우 .... 사용 %가 CHAIN ​​발견 당신은 %의 EOF 경우 사용할 수 있지만 당신은 사용할 수 없습니다 읽어 연산 코드가 무엇을 첫 번째 대답에 제임스 말을 .. 맞아

당신에게 두 테이블은 유사한 구조

INSERT INTO MFHHMHPK 이있는 경우 또한 SQL 문을 사용할 수 있습니다

+1

예, 가능한 경우 SQL을 som처럼 사용해야합니다. 이 간단한 것은 ** db-layer에서만 ** 많은 ** 빠를 수 있습니다. –

+0

어디서든지 ... 1 개의 SQL 문 또는 12 줄의 RPG. SQL이 더 나은 선택입니다. – WarrenT