IBM Support

COBOL Subfile Example Loading One Page at a Time

Troubleshooting


Problem

The following is an example of an ILE COBOL program that loads a subfile one page at a time.

Resolving The Problem

The following is an example of a COBOL program that loads a subfile one page at a time:
 

Database File:


     A          R FMT1
     A            ZIP            5A
     A            CUST          20A
     A            NAME          20A
     A          K ZIP       

Display File:

     A                                      PRINT
     A                                      CF03(03)
     A                                      HELP
     A                                      INDARA
     A****************************************************************
     A*  HEADER RECORD TO BE AT TOP OF DISPLAY
     A****************************************************************
     A          R HEADER
     A                                      OVERLAY
     A                                  2  3'HEADER'
     A                                  2 70DATE EDTWRD('  /  /  ')
     A                                  3 70TIME EDTWRD('  :  :  ')
     A****************************************************************
     A*  SUBFILE RECORD
     A****************************************************************
     A          R SF
     A                                      SFL
     A            ZIP            5   O  8 12
     A            CUST          20   O  8 28
     A            NAME          20   O  8 53
     A****************************************************************
     A*  SUBFILE CONTROL RECORD
     A****************************************************************
     A          R SCTL                      SFLCTL(SF)
     A                                      OVERLAY
     A                                      SFLSIZ(08)
     A                                      SFLPAG(07)
     A                                      ROLLUP(90)
     A  31                                  SFLDSP
     A  32                                  SFLDSPCTL
     A  33                                  SFLEND
     A  34                                  SFLCLR
     A  35                                  SFLINZ
     A            WDPOS          4S 0H      SFLRCDNBR
     A                                  4 12'SUBFILE CONTROL'
     A                                  6 12'ZIP'
     A                                  7 12'-----'
     A                                  6 28'CUSTOMER'
     A                                  7 28'--------------------'
     A                                  6 53'NAME'
     A                                  7 53'--------------------'
     A****************************************************************
     A*  WRITE IF SUBFILE IS EMPTY
     A****************************************************************
     A          R EMPTY
     A                                      OVERLAY
     A                                  8 12'THE SUBFILE IS EMPTY'
     A****************************************************************
     A*  FOOTER RECORD TO BE WRITTEN AT THE BOTTOM OF THE DISPLAY
     A****************************************************************
     A          R FOOTER
     A                                      OVERLAY
     A                                 23  3'FOOTER' 

COBOL Source named ONEPGSFL:
       IDENTIFICATION DIVISION.
       PROGRAM-ID. ONEPGSFL.
         DATE-WRITTEN. FEB. 11,1997.
         DATE-COMPILED.
       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION.
         SOURCE-COMPUTER. IBM-AS400.
         OBJECT-COMPUTER. IBM-AS400.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
           SELECT DISPLAY-FILE
                  ASSIGN       TO WORKSTATION-ONEPGSFLCB-SI
                  ORGANIZATION IS TRANSACTION
                  ACCESS MODE IS DYNAMIC
                  RELATIVE KEY IS RECNUM
                  FILE STATUS IS DISPLAY-FILE-STATUS.
            SELECT DBFILE ASSIGN TO DATABASE-TESTPF2
                ORGANIZATION IS INDEXED
                ACCESS IS DYNAMIC
                RECORD KEY IS EXTERNALLY-DESCRIBED-KEY
                WITH DUPLICATES
                FILE STATUS IS DBFILE-FILE-STATUS.
       DATA DIVISION.
       FILE SECTION.
       FD  DISPLAY-FILE
           LABEL RECORDS ARE STANDARD.
       01  DISPLAY-RECORD.
           COPY DDS-ALL-FORMATS OF ONEPGSFLCB.
      *
       FD  DBFILE
           LABEL RECORDS ARE STANDARD
           DATA RECORD IS FMT1.
       01  DBREC.
           COPY DDS-ALL-FORMATS OF TESTPF2.
      *
       WORKING-STORAGE SECTION.
       01 FILE-STATUS.
           05  DISPLAY-FILE-STATUS            PIC 99.
           05  DBFILE-FILE-STATUS             PIC 99.
       01 LOOP-COUNT                         PIC 99.
       01 WS-INDICATORS.
          05  IN03                   PIC 1 INDIC 03.
              88 END-PROGRAM         VALUE B"1".
              88 NOT-END-PROGRAM     VALUE B"0".
          05  IN31                   PIC 1 INDIC 31.
              88 SUBFILE-DISPLAY     VALUE B"1".
              88 NO-SUBFILE-DISPLAY  VALUE B"0".
          05  IN32                   PIC 1 INDIC 32.
              88 SUBFILE-CONTROL     VALUE B"1".
              88 NO-SUBFILE-CONTROL  VALUE B"0".
          05  IN33                   PIC 1 INDIC 33.
              88 SUBFILE-END         VALUE B"1".
              88 NOT-SUBFILE-END     VALUE B"0".
          05  IN34                   PIC 1 INDIC 34.
              88 SUBFILE-CLEAR       VALUE B"1".
              88 NOT-SUBFILE-CLEAR   VALUE B"0".
          05  IN90                   PIC 1 INDIC 90.
              88 PAGE-DOWN           VALUE B"1".
              88 NOT-PAGE-DOWN       VALUE B"0".
       01 RECNUM                     PIC 9(3) VALUE ZEROES.
     *
       01 IND-ON                     PIC 1 VALUE B"1".
       01 IND-OFF                    PIC 1 VALUE B"0".
       PROCEDURE DIVISION.
       MAIN-PROCESS.
           PERFORM INITIALIZE-001.
      *
      ****************************************************************
      *
      * CLEAR SFL
      *
      ****************************************************************
           SET NO-SUBFILE-DISPLAY TO TRUE.
           SET NO-SUBFILE-CONTROL TO TRUE.
           SET NOT-SUBFILE-END TO TRUE.
           SET SUBFILE-CLEAR TO TRUE.
           WRITE DISPLAY-RECORD FROM SCTL-O FORMAT IS "SCTL"
            INDICATORS ARE WS-INDICATORS.
           SET NOT-SUBFILE-CLEAR TO TRUE.
           SET SUBFILE-CONTROL TO TRUE.
      ****************************************************************
      *  LOAD FIRST PAGE OF DATA INTO SUBFILE.
      ****************************************************************
            PERFORM LOAD-SUBFILE.
      ****************************************************************
      *
      * CHECK TO SEE IF SUBFILE HAS ANY RECORDS.
      *    IF THERE ARE RECORDS THEN SET ON THE SFLDSP INDICATOR.
      *
      *    IF THERE ARE NOT ANY RECORD IN THE SUBFILE THEN WRITE
      *    THE EMPTY RECORD FORMAT.
      *
      ****************************************************************
           IF RECNUM IS GREATER THAN 0
               SET SUBFILE-DISPLAY TO TRUE
           ELSE
               WRITE DISPLAY-RECORD FORMAT IS "EMPTY".
           PERFORM DISPLAY-001 UNTIL END-PROGRAM.
           CLOSE DISPLAY-FILE
                 DBFILE.
           EXIT PROGRAM.
           STOP RUN.
        DISPLAY-001.
      ****************************************************************
      *
      * DISPLAY THE SCREEN.
      *
      ****************************************************************
           WRITE DISPLAY-RECORD FORMAT IS "HEADER".
           WRITE DISPLAY-RECORD FORMAT IS "FOOTER".
           MOVE RECNUM TO WDPOS OF SCTL-O.
           WRITE DISPLAY-RECORD FROM SCTL-O
             FORMAT IS "SCTL"
             INDICATORS ARE WS-INDICATORS.
           READ DISPLAY-FILE
             INDICATORS ARE WS-INDICATORS.
      ****************************************************************
      * CHECK FOR ROLL KEY AND END OF FILE
      ****************************************************************
           IF PAGE-DOWN
           AND NOT-END-PROGRAM
             SET NOT-PAGE-DOWN TO TRUE.
             IF NOT-SUBFILE-END
                PERFORM LOAD-SUBFILE.
        INITIALIZE-001.
           OPEN I-O DISPLAY-FILE.
           OPEN INPUT DBFILE.
           MOVE ZERO TO RECNUM.
           SET NOT-END-PROGRAM TO TRUE.
      *
      ****************************************************************
      *
      * LOAD SUBFILE
      *    THIS PROGRAM LOADS THE ENTIRE SUBFILE.  THIS IS NOT VERY
      *    EFFICIENT IF THERE ARE MORE THAN A COUPLE SUBFILE PAGES
      *    OF DATA IN THE DATABASE FILE.  IF THERE IS TOO MUCH DATA
      *    YOU SHOULD CONSIDER LOADING THE SUBFILE ONE PAGE AT A TIME.
      *
      ****************************************************************
       LOAD-SUBFILE.
           MOVE 0 TO LOOP-COUNT.
           IF RECNUM EQUAL TO ZERO
              READ DBFILE FIRST RECORD
              IF DBFILE-FILE-STATUS = "00"
                 ADD 1 TO RECNUM
                 ADD 1 TO LOOP-COUNT
                 MOVE CORRESPONDING FMT1 TO SF-O
                 WRITE SUBFILE DISPLAY-RECORD FROM SF-O
                    FORMAT IS "SF"
                    INDIC IS WS-INDICATORS
                 READ DBFILE NEXT RECORD.
           PERFORM UNTIL DBFILE-FILE-STATUS NOT = "00"
           OR (LOOP-COUNT GREATER THAN OR EQUAL TO 7)
                  MOVE CORRESPONDING FMT1 TO SF-O
                  ADD 1 TO RECNUM
                  ADD 1 TO LOOP-COUNT
                  WRITE SUBFILE DISPLAY-RECORD FROM SF-O
                      FORMAT IS "SF"
                       INDIC IS WS-INDICATORS
                  READ DBFILE NEXT RECORD
            END-PERFORM.
           IF DBFILE-FILE-STATUS NOT EQUAL TO "00"
              SET SUBFILE-END TO TRUE. 
CRTBNDCBL   PGM(<yourlib>/ONEPGSFL) SRCFILE(<yourlib>/QCBLLESRC) RCMBR(ONEPGSFL) 
CALL <yourflib>/ONEPGSFL
image-20241114153559-1
Press Page Down for  more records
image-20241114153809-2
Press Page Down for more records.
image-20241114153930-3

[{"Type":"MASTER","Line of Business":{"code":"LOB68","label":"Power HW"},"Business Unit":{"code":"BU070","label":"IBM Infrastructure"},"Product":{"code":"SWG60","label":"IBM i"},"ARM Category":[{"code":"a8m3p000000F98bAAC","label":"Programming ILE Languages-\u003ECOBOL"}],"ARM Case Number":"","Platform":[{"code":"PF012","label":"IBM i"}],"Version":"All Versions"}]

Historical Number

7950009

Document Information

Modified date:
14 November 2024

UID

nas8N1010265