2012-08-16 50 views
0

我正在使用三個不同記錄格式的邏輯文件 其中第一個子文件我使用LF1和LF2 哪裏第一個子文件我不能使用* LOVAL SETLL它會給我運行時錯誤。 不知道爲什麼?邏輯文件不適用於SUBFILE/SETLL?

然後程序會導致我第二個子文件 ,我使用LF3 它似乎很好。

但如果我回到第一個子文件的子文件變成空白。 爲什麼?

這是我的子程序建設我的子文件:

C  CLRSR   BEGSR                        
C     EVAL  *IN55='0'                    
C     WRITE  USQLSCTL                     
C     EVAL  *IN55='1'                    
C     ENDSR                        
C*                              
C*BUILDING SUBFILE                          
C  BLDSR   BEGSR                        
C  *LOVAL  SETLL  USRLGX                     
C     EVAL  RECNO=0                     


C     EXSR  TMISR1                     
C     EXSR  REDSR1                     

C     DOW  NOT %EOF                     
C     IF  USRID<>IDD                    
C     EXSR  MVESR                     
C     EXSR  DIMSR                     
C     MOVE  USRID   IDD                  
C     EVAL  RECNO=RECNO+1                   
C     WRITE  USQLS                     
C     ENDIF                        

C     EXSR  TMISR1                     
C     EXSR  REDSR1                     

C     ENDDO                        
C     ENDSR 

和相關子程序

C  TMISR1  BEGSR                        
C     READ  USRLGX                     
C     MOVE  USRTI   MINTI                  
C     ENDSR                        

C  REDSR1  BEGSR                        
C     READ  USRLG                     
C     MOVE  USRTO   MAXTO                  
C     ENDSR              6          

ñ我用LF是USRLG和USRLGX。 其中兩個LF表示相同的記錄格式。但每個LF都有不同的排序順序。 *記錄格式已被重新命名F-規格

  • 我有這個兩個問題是:
  • 我只能用* LOVAL SETLL邏輯文件一次只。
  • n個結果的上述編碼的某個時候,它會給結果爲UserTimeIn一段時間,它等於空白。(000000)
+0

LF中的鍵的定義是什麼,請在你的pgm中顯示它的I/O語句。你得到什麼鈴聲錯誤? – WarrenT 2012-08-16 03:51:04

+0

另外,哪一個是'LF1',是'LF2'還是'LF3'?你在'DOW NOT%EOF'上等待什麼文件(如果可能,總是限定期望的文件) - 有兩種可能性(我們知道)。你還沒有提供3個子例程的定義,它們很重要嗎?並且_where_你得到運行時錯誤(和它是什麼)?也許最重要的是...... **爲什麼**你堅持以_columnar_格式工作 - 你在什麼版本的操作系統? – 2012-08-16 15:27:24

+0

@ X-Zero我想我記得他是一名學生;語法的選擇(和'沒有SQL')不是他要做的。 – 2012-08-16 16:32:31

回答

1

當過使用* LOVAL則必須使用記錄地址型「K」(指鍵入程序)