Ibm midrange 逻辑文件不适用于子文件/SETLL?

Ibm midrange 逻辑文件不适用于子文件/SETLL?,ibm-midrange,rpgle,rpg,Ibm Midrange,Rpgle,Rpg,我使用三个不同记录格式的逻辑文件 在第一个子文件中,我使用的是LF1和LF2 在第一个子文件中,我不能使用*LOVAL SETLL,它将给我运行时错误。 不知道为什么 C TMISR1 BEGSR C READ USRLGX

我使用三个不同记录格式的逻辑文件 在第一个子文件中,我使用的是LF1和LF2 在第一个子文件中,我不能使用*LOVAL SETLL,它将给我运行时错误。 不知道为什么

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                                      
然后程序将引导我到第二个子文件 我用的是LF3 看起来不错

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                                      
但是如果我回到第一个子文件,子文件变成空白。???? 为什么?

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                                      
这是我用于构建子文件的子程序:

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                                      
n我使用的LF是USRLG和USRLGX。 其中两个LF引用相同的记录格式。但是每个LF有不同的排序顺序。 *记录格式已在F-Spec上重命名

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                                      
  • 我有两个问题,就是:
  • 我只能使用*LOVAL setll逻辑文件一次
  • n上面的编码结果有时会给出UserTime的结果,有时等于空白。(000000)

当您使用*LOVAL时,必须使用记录地址类型“k”(表示程序中的键)

LF中键的定义是什么,请在pgm中为其显示I/O语句。您收到了什么铃声错误?还有,哪个是“LF1”,哪个是“LF2”,哪个是“LF3”?您在
DOW上等待的文件不是%EOF
(如果可能,请始终限定预期文件)-有两种可能性(我们知道)。您还没有提供3个子例程的定义,它们重要吗?您从哪里得到运行时错误(它是什么)?也许最重要的是。。。你为什么坚持以专栏形式工作?你使用的是什么版本的操作系统?@X-Zero我想我记得他是个学生;语法的选择(以及“无SQL”)不是他的职责。@user1516536子文件是RPG和DDS之间的紧密耦合。如果您发布相关的DDS,将更容易看到发生了什么。RPG计划中的F-规格也是一个好主意。
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