2
respostas

[Dúvida] [COBOL] Criação de CRM

Bom dia,

Estou fazendo o curso Cobol: desenvolvendo um CRM com arquivos indexados e estamos criando o código para uma das opções do CRM, o MANUT.COB.

Criei o programa assim como o professor, porém meu output é diferente e não consigo descobrir porquê continua dando errado.
Esse é o meu código no VS CODE:

       IDENTIFICATION      DIVISION.
       PROGRAM-ID. MANUT.

       ENVIRONMENT         DIVISION.
       INPUT-OUTPUT        SECTION.
       FILE-CONTROL.
           SELECT ARQCRM ASSIGN TO "...\DADOS\ARQCRM.DAT"
           ORGANIZATION IS INDEXED
           ACCESS MODE IS RANDOM
           FILE STATUS IS ARQCRM-FS
           RECORD KEY IS ARQCRM-CHAVE.
       DATA DIVISION.
       FILE SECTION.
       FD ARQCRM.
       COPY "#CRM".
       WORKING-STORAGE     SECTION.
       01 ARQCRM-FS           PIC 9(02) VALUE ZEROS.

       SCREEN              SECTION.
       01 TELA.
           05 BLANK SCREEN.

       PROCEDURE DIVISION.
           PERFORM INICIAR.
           PERFORM FINALIZAR.

           GOBACK.
       INICIAR    SECTION.
           OPEN INPUT ARQCRM
           DISPLAY "STATUS ABERTURA " ARQCRM-FS
           EVALUATE ARQCRM-FS
               WHEN 00
                   DISPLAY "ARQUIVO JA EXISTE " LINE 01 COLUMN 01
               WHEN 35
                   OPEN OUTPUT ARQCRM
               DISPLAY "ARQUIVO FOI CRIADO" LINE 01 COLUMN 01
               WHEN OTHER
               DISPLAY "ERRO   "            LINE 01 COLUMN 01
               DISPLAY ARQCRM-FS            LINE 02 COLUMN 01
               GOBACK
           END-EVALUATE.
           FINALIZAR     SECTION.
               CLOSE ARQCRM.
           STOP RUN.
               

Basicamente o que acontece é que recebo esse display quando executo o MANUT.exe da pasta \bin:

Display do terminal do VS Code

Entendo que ele da o return code 91, não entra nem no 00 nem no 35, que era o esperado. Imagino que seja porquê a criação do file falhou, mas não sei bem porquê, imaginei que fosse o caminho, talvez, mas até usei um caminho absoluto e continua dando o mesmo erro: C:\COBOL\COBOL - CRM\DADOS\ARQCRM.DAT

Podem me ajudar a desvendar isso?

Obrigado!

2 respostas

Oi Guilherme, tudo bem? 😊

Analisando o seu código, o erro 91 geralmente indica que o programa não conseguiu encontrar o arquivo especificado. 💪

Aqui estão algumas sugestões para solucionar o problema:

  1. Verifique o caminho do arquivo:
    • Certifique-se de que o caminho "...\DADOS\ARQCRM.DAT" está correto e que o arquivo realmente existe nesse local.
    • Se você está usando um caminho relativo, lembre-se de que ele é relativo ao diretório de execução do programa, não ao diretório do código fonte.
    • Como você mencionou, usar um caminho absoluto pode ajudar a evitar problemas com caminhos relativos.
  2. Verifique as permissões do arquivo:
    • Certifique-se de que o programa COBOL tem permissão para acessar o arquivo.
    • Em alguns sistemas operacionais, pode ser necessário executar o programa como administrador para ter permissão para acessar determinados arquivos.
  3. Verifique se o arquivo está sendo usado por outro programa:
    • Se o arquivo estiver aberto por outro programa, o COBOL não conseguirá acessá-lo.
    • Feche todos os outros programas que possam estar usando o arquivo e tente novamente.
  4. Verifique a codificação do arquivo:
    • Em alguns casos, a codificação do arquivo pode causar problemas.
    • Tente salvar o arquivo com uma codificação diferente, como UTF-8, e veja se isso resolve o problema.
  5. Use o comando DISPLAY para depurar:
    • Adicione comandos DISPLAY em seu código para verificar o valor de ARQCRM-FS em diferentes pontos do programa.
    • Isso pode ajudá-lo a identificar onde o erro está ocorrendo.
  6. Tente criar o arquivo manualmente:
    • Antes de executar o programa, crie o arquivo ARQCRM.DAT manualmente no diretório especificado.
    • Isso pode ajudar a determinar se o problema está relacionado à criação do arquivo.

Além disso, notei que você está abrindo o arquivo como INPUT e, em caso de erro 35 (arquivo não existe), você tenta abri-lo como OUTPUT.
O ideal seria abrir o arquivo como I-O (Input-Output) para permitir tanto a leitura quanto a escrita.
Veja como ficaria o código:

       ENVIRONMENT         DIVISION.
       INPUT-OUTPUT        SECTION.
       FILE-CONTROL.
           SELECT ARQCRM ASSIGN TO "...\DADOS\ARQCRM.DAT"
           ORGANIZATION IS INDEXED
           ACCESS MODE IS RANDOM
           FILE STATUS IS ARQCRM-FS
           RECORD KEY IS ARQCRM-CHAVE.
       DATA DIVISION.
       FILE SECTION.
       FD ARQCRM.
       COPY "#CRM".
       WORKING-STORAGE     SECTION.
       01 ARQCRM-FS           PIC 9(02) VALUE ZEROS.
       PROCEDURE DIVISION.
           PERFORM INICIAR.
           PERFORM FINALIZAR.
           GOBACK.
       INICIAR    SECTION.
           OPEN I-O ARQCRM
           DISPLAY "STATUS ABERTURA " ARQCRM-FS
           EVALUATE ARQCRM-FS
               WHEN 00
                   DISPLAY "ARQUIVO JA EXISTE " LINE 01 COLUMN 01
               WHEN 35
                   DISPLAY "ARQUIVO NAO EXISTE, CRIANDO..." LINE 01 COLUMN 01
                   OPEN OUTPUT ARQCRM.
                   CLOSE ARQCRM.
                   OPEN I-O ARQCRM.
                   DISPLAY "ARQUIVO FOI CRIADO" LINE 02 COLUMN 01
               WHEN OTHER
                   DISPLAY "ERRO   "            LINE 01 COLUMN 01
                   DISPLAY ARQCRM-FS            LINE 02 COLUMN 01
                   GOBACK
           END-EVALUATE.
           FINALIZAR     SECTION.
               CLOSE ARQCRM.
           STOP RUN.

🎓 Para saber mais:

Espero que estas dicas ajudem a resolver o problema! 🤔

Luis, era problema de autoridade mesmo, consegui resolver - muito obrigado pela ajuda!!