ibmi-brunch-learn

Announcement

Collapse
No announcement yet.

[please help] compile error

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • [please help] compile error

    i have read ebook COBOL400 user guide, then i write cobol program from an example at this book on page 98-101.

    after i compile there are many error like this ....
    i don't know why?

    error message from spool file
    PHP Code:
              use cannot be determined. Default  item assumed.                  
    *  
    108  MSGIDLBL1463  SEVERITY30  SEQNBR:  013400                       
            Message 
    . . . . :   'IN99 OF ACCTPMT-O-INDIC' previously defined    
              in program
    , use cannot be determined. Default  item assumed.      
    *  
    109  MSGIDLBL1463  SEVERITY30  SEQNBR:  013500                       
            Message 
    . . . . :   'IN99 OF ACCTPMT-O-INDIC' previously defined    
              in program
    , use cannot be determined. Default  item assumed.      
                                                                    
    *  
    112  MSGIDLBL1463  SEVERITY30  SEQNBR:  014200                       
            Message 
    . . . . :   'ACCTTO' previously defined in program, use     
              
    cannot be determined. Default  item assumed.                      
    *  
    114  MSGIDLBL1463  SEVERITY30  SEQNBR:  014400                       
            Message 
    . . . . :   'IN97 OF ACCTPMT-O-INDIC' previously defined    
              in program
    , use cannot be determined. Default  item assumed.      
    *  
    115  MSGIDLBL1463  SEVERITY30  SEQNBR:  014500                       
            Message 
    . . . . :   'IN97 OF ACCTPMT-O-INDIC' previously defined    
              in program
    , use cannot be determined. Default  item assumed.      
    *  
    118  MSGIDLBL1463  SEVERITY30  SEQNBR:  015200                       
    ....
    ..... 
    this is display file ACCTFMTS
    PHP Code:
         A                                      INDARA
         A          R ACCTPMT
         A                                      TEXT
    ('CUSTOMER ACCOUNT PROMPT')
         
    A
         A                                      CA01
    (15 'END OF PROGRAM')
         
    A                                      PUTRETAIN OVERLAY
         A                                  1  3
    'ACCOUNT MASTER UPDATE'
         
    A                                  3  3'FROM ACCOUNT NUMBER'
         
    A            ACCTFROM       5Y 0I  3 23CHECK(ME)
         
    A  99                                  ERRMSG('INVALID FROM ACCOUNT +
         A                                      NUMBER' 
    99)
         
    A  98                                  ERRMSG('INSUFFICIENT FUNDS IN +
         A                                      FROM ACCOUNT' 
    98)
         
    A                                  4  3'TO ACCOUNT NUMBER'
         
    A            ACCTTO         5Y 0I  4 23CHECK(ME)
         
    A  97                                  ERRMSG('INVALID TO ACCOUNT +
         A                                      NUMBER' 
    97)
         
    A                                  5  3'AMOUNT TRANSFERED'
         
    A            TRANSAM       10Y 2I  5 23
         A          R ERRFMT
         A  96                              6  5
    'INVALID FILE STATUS'
         
    A  96                              7  5'INVALID KEY IN REWRITE' 
    this is phisical file ACCTMST
    PHP Code:
         A                                      UNIQUE
         A          R ACCNTREC
         A            ACCNTKEY       5P 0       TEXT
    ('ACCOUNT KEY')
         
    A            NAME          20A         TEXT('NAME')
         
    A            ADDR          20A         TEXT('ADDRESS')
         
    A            CITY          20A         TEXT('CITY')
         
    A            STATE          2A         TEXT('STATE')
         
    A            ZIP            5P 0       TEXT('ZIP')
         
    A            BALANCE       10P 2       TEXT('BALANCE')
         
    A
         A          K ACCNTKEY
         A
         A 
    and this is my Cobol program ACCOUNT
    PHP Code:
           IDENTIFICATION DIVISION.
           
    PROGRAM-ID.  ACCOUNT.
              
    AUTHOR.   MKT.
           
    ENVIRONMENT DIVISION.
           
    CONFIGURATION SECTION.
           
    SOURCE-COMPUTERIBM-AS400.
           
    OBJECT-COMPUTERIBM-AS400.
           
    INPUT-OUTPUT SECTION.

           
    FILE-CONTROL.
               
    SELECT ACCOUNT-FILE ASSIGN TO DATABASE-ACCTMST
                  ORGANIZATION IS INDEXED
                  ACCESS IS DYNAMIC
                  RECORD IS EXTERNALLY
    -DESCRIBED-KEY
                  FILE STATUS IS ACCOUNT
    -FILE-STATUS.

               
    SELECT DISPLAY-FILE ASSIGN TO WORKSTATION-ACCTFMTS-SI
                  ORGANIZATION IS TRANSACTION
    .

          ******************************************************************
           
    I-O-CONTROL.
               
    COMMITMENT CONTROL FOR ACCOUNT-FILE.
          ******************************************************************
           
    DATA DIVISION.
           
    FILE SECTION.
           
    FD   ACCOUNT-FILE
                LABEL RECORDS ARE STANDARD
    .
           
    01   ACCOUNT-RECORD.
                
    COPY  DDS-ALL-FORMATS OF ACCTMST.
                  
    05  ACCTMST-RECORD PIC X(82).                             <-ALL-FMTS
          
    *     I-O   FORMAT:ACCNTREC FROM FILE ACCTMST OF LIBRARY DODILIB  <-ALL-FMTS
          
    *THE KEY DEFINITONS FOR RECORD FORMAT ACCNTREC                    <-ALL-FMTS
          
    *  NUMBER                 NAME               RETRIEVAL       TYPE <-ALL-FMTS
          
    *  0001   ACCNTKEY                           ASCENDING       SIGNE<-ALL-FMTS
                05  ACCNTREC    REDEFINES    ACCTMST
    -RECORD.                <-ALL-FMTS
                    06 ACCNT
    -KEY             PIC S9(5).                     <-ALL-FMTS
                    06 NAME                  PIC X
    (20).                     <-ALL-FMTS
                    06 ADDR                  PIC X
    (20).                     <-ALL-FMTS
                    06 CITY                  PIC X
    (20).                     <-ALL-FMTS
                    06 STATE                 PIC X
    (2).                      <-ALL-FMTS
                    06 ZIP                   PIC S9
    (5).                     <-ALL-FMTS
                    06 BALANCE               PIC S9
    (8)V9(2).                <-ALL-FMTS

           FD  DISPLAY
    -FILE
               LABEL RECORDS ARE STANDARD
    .

           
    01  DISPLAY-REC.
               
    COPY DDS-ALL-FORMATS OF ACCTFMTS.
                 
    05 ACCTFMTS-RECORD PIC X(20).                              <-ALL-FMTS
                                                                            
    <-ALL-FMTS
          
    INPUT FORMATACCTPMT  FROM FILE ACCTFMTS OF LIBRARY DODILIB    <-ALL-FMTS
          
    *                        CUSTOMER ACCOUNT PROMPT                  <-ALL-FMTS
               05   ACCTPMT
    -I  REDEFINES ACCTFMTS-RECORD.                   <-ALL-FMTS
                    06 ACCTFROM     PIC S9
    (5).                              <-ALL-FMTS
                    06 ACCTTO       PIC S9
    (5).                              <-ALL-FMTS
                    06 TRANSAMT     PIC S9
    (8)V9(2).                         <-ALL-FMTS

           WORKING
    -STORAGE SECTION.
           
    77   ACCOUNT-FILE-STATUS          PIC X(2).
           
    77   IND-ON                       PIC 1    VALUE  B"1".
           
    77   IND-OFF                      PIC 1    VALUE  B"0".

           
    01   DISPFILE-INDICS.
                
    COPY   DDS-ALL-FORMATS-INDIC  OF ACCTFMTS.
                  
    05   ACCTFMTS-RECORD.                                     <-ALL-FMTS
                       06   ACCTPMT
    -I-INDIC.                                <-ALL-FMTS
                            07   IN15          PIC  1   INDIC 15.           
    <-ALL-FMTS
          
    *                        END OF PROGRAM                           <-ALL-FMTS
                            07   IN97          PIC  1   INDIC 97.           
    <-ALL-FMTS
          
    *                        INVALID ACCOUNT NUMBER                   <-ALL-FMTS
                            07   IN98          PIC  1   INDIC 98.           
    <-ALL-FMTS
          
    *                        INSUFFICIENT FUNDS IN FORM ACCOUNT.      <-ALL-FMTS
                            07   IN99          PIC  1   INDIC 99.           
    <-ALL-FMTS
          
    *                        INVALID FROM ACCOUNT NUMBER              <-ALL-FMTS
                                                                            
    <-ALL-FMTS
                       06   ACCTPMT
    -O-INDIC.                                <-ALL-FMTS
                            07   IN97          PIC  1   INDIC 97.           
    <-ALL-FMTS
          
    *                        INVALID ACCOUNT NUMBER                   <-ALL-FMTS
                            07   IN98          PIC  1   INDIC 98.           
    <-ALL-FMTS
          
    *                        INSUFFICIENT FUNDS IN FORM ACCOUNT.      <-ALL-FMTS
                            07   IN99          PIC  1   INDIC 99.           
    <-ALL-FMTS
          
    *                        INVALID FROM ACCOUNT NUMBER              <-ALL-FMTS
                                                                            
    <-ALL-FMTS
          
    *            06   ERRFMT-I-INDIC.                                 <-ALL-FMTS
          
    *                                                                 <-ALL-FMTS
                                                                            
    <-ALL-FMTS
                       06   ERRFMT
    -O-INDIC.                                 <-ALL-FMTS
                             07  IN95          PIC  1   INDIC 95.           
    <-ALL-FMTS
                             07  IN96          PIC  1   INDIC 96.           
    <-ALL-FMTS

           PROCEDURE DIVISION
    .
           
    DECLARATIVES.
           
    ERROR-SECTION SECTION.
               USE 
    AFTER STANDARD EXCEPTION PROCEDURE ON ACCOUNT-FILE.
           
    ERROR-PARAGRAPH.
               IF 
    ACCOUNT-FILE-STATUS IS NOT EQUAL "23"
               
    THEN
                  MOVE IND
    -ON TO IN96 OF ERRFMT-O-INDIC
               
    ELSE
                  
    MOVE IND-ON TO IN95 OF ERRFMT-O-INDIC.

               
    WRITE  DISPLAY-REC  FORMAT IS "ERRFMT"
                      
    INDICATORS ARE ERRFMT-O-INDIC.
               
    READ DISPLAY-FILE.
               
    CLOSE DISPLAY-FILE
                     ACCOUNT
    -FILE.
               
    STOP RUN.
           
    END DECLARATIVES.

           
    MAIN-PROGRAM SECTION.
           
    MAINLINE.
               
    OPEN I-O DISPLAY-FILE
                    I
    -O ACCOUNT-FILE.
               
    MOVE ZEROS TO ACCTPMT-I-INDIC
                             ACCTPMT
    -O-INDIC.
               
    PERFORM WRITE-READ-DISPLAY.
               
    PERFORM VERIFY-ACCOUNT-NO UNTIL IN15 EQUAL IND-ON.
               
    CLOSE DISPLAY-FILE
                     ACCOUNT
    -FILE.

               
    STOP RUN.

           
    VERIFY-ACCOUNT-NO.
               
    PERFORM VERIFY-TO-ACCOUNT.
               IF 
    IN97 OF ACCTPMT-O-INDIC EQUAL IND-OFF
               THEN
                  PERFORM VERIFY
    -FROM-ACCOUNT.

               
    PERFORM WRITE-READ-DISPLAY.

           
    VERIFY-FROM-ACCOUNT.
               
    MOVE ACCTFROM TO ACCNTKEY.
               
    READ ACCOUNT-FILE
                    INVALID KEY MOVE IND
    -ON TO IN99 OF ACCTPMT-O-INDIC.
               IF 
    IN99 OF ACCTPMT-O-INDIC EQUAL IND-ON
               THEN
                   ROLLBACK
               
    ELSE
                   
    PERFORM UPDATE-FROM-ACCOUNT.

           
    VERIFY-TO-AMOUNT.
               
    MOVE ACCTTO TO ACCNTKEY.
                
    READ ACCOUNT-FILE
                     INVALID KEY MOVE IND
    -ON TO IN97 OF ACCTPMT-O-INDIC.
                IF 
    IN97 OF ACCTPMT-O-INDIC EQUAL IND-ON
                THEN
                    ROLLBACK
                
    ELSE
                    
    PERFORM UPDATE-TO-ACCOUNT.

           
    UPDATE-TO-ACCOUNT.
               
    ADD TRANSAMT TO BALANCE.
               
    REWRITE ACCOUNT-RECORD.

           
    UPDATE-FROM-ACCOUNT.
               
    SUBTRACT TRANSAMT FROM BALANCE.
               
    REWRITE ACCOUNT-RECORD.
               IF 
    BALANCE IS LESS THAN 0
               THEN
                   MOVE IND
    -ON TO IN98 OF ACCTPMT-O-INDIC
                   ROLLBACK
               
    ELSE
                   
    COMMIT.

           
    WRITE-READ-DISPLAY.
               
    WRITE DISPLAY-REC FORMAT IS "ACCTPMT"
                   
    INDICATORS ARE ACCTPMT-O-INDIC.
               
    MOVE ZEROS TO ACCTPMT-I-INDIC
                             ACCTPMT
    -O-INDIC.
               
    READ DISPLAY-FILE RECORD
                    INDICATORS ARE ACCTPMT
    -I-INDIC
    please help me
    i am newbie

    thx u

  • #2
    This looks like a homework assignment...

    First, to reduce your error volume, you need to correct your COPY statements by reducing your File Section to just these lines:
    Code:
           DATA DIVISION.
           FILE SECTION.
    
           FD   ACCOUNT-FILE
           01   ACCOUNT-RECORD.
                COPY  DDS-ALL-FORMATS OF ACCTMST.
    
           FD  DISPLAY-FILE
           01  DISPLAY-REC.
               COPY DDS-ALL-FORMATS OF ACCTFMTS.
    Then, in Working Storage, remove all of your indicator definitions with the exception of these lines:
    Code:
           01   DISPFILE-INDICS.
                COPY   DDS-ALL-FORMATS-INDIC  OF ACCTFMTS.
    Recompile your program and you'll see the errors reduced dramatically. Look at your compile list to see what variables and indicators were brought into your program.

    Terry

    Comment


    • #3
      Re: [please help] compile error

      Originally posted by Terry Wincheste View Post
      This looks like a homework assignment...

      First, to reduce your error volume, you need to correct your COPY statements by reducing your File Section to just these lines:
      Code:
             DATA DIVISION.
             FILE SECTION.
      
             FD   ACCOUNT-FILE
             01   ACCOUNT-RECORD.
                  COPY  DDS-ALL-FORMATS OF ACCTMST.
      
             FD  DISPLAY-FILE
             01  DISPLAY-REC.
                 COPY DDS-ALL-FORMATS OF ACCTFMTS.
      Then, in Working Storage, remove all of your indicator definitions with the exception of these lines:
      Code:
             01   DISPFILE-INDICS.
                  COPY   DDS-ALL-FORMATS-INDIC  OF ACCTFMTS.
      Recompile your program and you'll see the errors reduced dramatically. Look at your compile list to see what variables and indicators were brought into your program.

      Terry
      hi terry,
      thx for reply. this is not a homework. my boss ask me to learn COBOL.

      after i removed that indicators like u say, i'va compiled success (no error)

      but when i call that program always show "INVALID FILE STATUS"

      i don't know why this happen. is anything wrong ??? let me know

      this my job log

      PHP Code:
      call account                                                  
          Specified record length is not equal to record length of file
      .
          
      Commitment definition *N not valid for open of ACCTMST
      thx u

      Comment


      • #4
        Re: [please help] compile error

        The ILE/Cobol manuals are located online here:



        You should download both of these PDF manuals. File Status values are listed in Appendix F.

        WebSphere Development Studio: ILE COBOL Programmer's Guide
        WebSphere Development Studio: ILE COBOL Reference

        First, you should press F1 on the messages in your job log to see the details of the error and the line number in the program where the error occurred, then check your compile list to see what went wrong.

        You first error message may be related to an invalid WRITE/READ statement using the wrong FROM record area. It may be in your VERIFY-TO-ACCOUNT paragraph...but that is just a guess...

        It looks like your second error is related to commitment control. I believe the file has to be journaled in order to use the Cobol Commitment Control but I have -no- background in this area. Review chapter 18 of the Programmers Guide for giudance with regards to commitment control.

        Terry

        Comment

        Working...
        X