IMEDIATA  |  Familia Stringari

Cobol acessando Mysql.

Cobol MySql


Foi criada uma rotina que possibilita que programas escritos originalmente em Cobol, acessando arquivos Micro Focus (ISAM), possam acessar base de dados em MySql, obtendo os mesmos resultados sem a necessidade de reescrever os programas.

Esta rotina possibilita acessar a base em MySql usando apenas os comando tradicionais do COBOL. "OPEN, START, READ, WRITE, REWRITE, DELETE e CLOSE".

Para tal basta criar as tabelas no MySql, seguindo determinados critérios, transferir os dados dos arquivos em COBOL para as respectivas tabelas, alterar algumas configurações e pronto, é só rodar o programas.

Feito isso, o programa passa a acessar a base de dados em MySql, é só incluir uma linha contendo 'CALLFH"extmysql"' no arquivo 'COBOL.DIR', na pasta onde estão os fontes, ou incluir uma linha no programa 'SET CALLFH"extmysql"' e recompilar seu programa.

Abaixo, programa modelo para converter base de dados gerada no COBOL MF, para Mysql.


 **************************************************************************
* IMEDIATA INFORMATICA EMPRESARIAL LTDA *
* PROGRAMA - CnvMfMy - Converte arquivo gerado originalmente em COBOL *
* para Banco de dados Mysql *
**************************************************************************
IDENTIFICATION DIVISION.
PROGRAM-ID. CnvMfMy.
AUTHOR. Franco Stringari Pudler.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES. DECIMAL-POINT IS COMMA.
INPUT-OUTPUT SECTION.
FILE-CONTROL.

*> Informa que o arquivo é padrão MYSQL

SELECT ARQMYS ASSIGN TO DYNAMIC W-LABMSQ
ORGANIZATION IS INDEXED
ACCESS MODE IS DYNAMIC
LOCK MODE IS MANUAL
FILE STATUS IS W-STATUS
RECORD KEY IS MY-LAN
ALTERNATE RECORD KEY IS MY-CTA
WITH DUPLICATES.

*> Informa que próximo arquivo é padrão DEFAULT MF

SELECT ARQMFS ASSIGN TO DYNAMIC W-LABMFS
ORGANIZATION IS INDEXED
ACCESS MODE IS DYNAMIC
LOCK MODE IS MANUAL
FILE STATUS IS W-STATUS
RECORD KEY IS MF-LAN
ALTERNATE RECORD KEY IS MF-CTA
WITH DUPLICATES.

DATA DIVISION.
FILE SECTION.

*> Definição do registro do arquivo que será gerado no MySql
FD ARQMYS.
01 MY-REG.
02 MY-SIT PIC X(01).
02 MY-LAN PIC S9(09) COMP-3.
02 MY-CTA PIC S9(15) COMP-3.
02 MY-CDH PIC S9(05) COMP-3.
02 MY-HST PIC X(30).
02 MY-DTA PIC S9(09) COMP-3.
02 MY-VAL PIC S9(13)V99 COMP-3.

*> Definição do registro do arquivo com os dados originalmente gerados no padrão MF
FD ARQMFS.
01 MF-REG.
02 MF-SIT PIC X(01).
02 MF-LAN PIC S9(09) COMP-3.
02 MF-CTA PIC S9(15) COMP-3.
02 MF-CDH PIC S9(05) COMP-3.
02 MF-HST PIC X(30).
02 MF-DTA PIC S9(09) COMP-3.
02 MF-VAL PIC S9(13)V99 COMP-3.

WORKING-STORAGE SECTION.
77 W-LABMFS PIC X(60) VALUE "ARQMFS".
77 W-LABMSQ PIC X(60) VALUE SPACES.
77 W-STATUS PIC X(02).
88 STAT-ERRO VALUE X"3100" THRU X"3943"
X"3945" THRU X"39EE".

88 DUPLICADO VALUE "22".

77 W-MSG PIC X(80) VALUE SPACES.

LINKAGE SECTION.

PROCEDURE DIVISION.
INICIO.

MOVE "ARQMFS" TO W-LABMFS. *> Define onde estão os dados

OPEN INPUT ARQMFS. *> Abre arquivo MF
IF STAT-ERRO *> Verifica se abertura foi OK
STRING "Abrindo Lote[" W-LABMFS "] Status"
W-STATUS DELIMITED BY " " INTO W-MSG
DISPLAY W-MSG *> Comunica causa do problema
STOP RUN.

MOVE "@127.0.0.1@3306@root@1234@imediata@ARQMYS"
TO W-LABMSQ. *> Define parametros para o MySql

OPEN I-O ARQMYS. *> Abre arquivo no MySql
IF STAT-ERRO
DISPLAY "Criando Arquivo de destino"
STOP RUN.

MOVE ZEROS TO MF-LAN. *> Define ponto de partida
START ARQMFS KEY IS NOT LESS THAN MF-LAN. *> Posiciona no registro Cf definido acima
PERFORM UNTIL STAT-ERRO *> Loop para geração do arquivo
READ ARQMFS NEXT RECORD *> Recupera registro no arquivo Micro Focus
AT END DISPLAY "Fim conversão sem problemas" *> Termino sem problemas
NOT AT END *> Encontrou registro
MOVE MF-REG TO MY-REG *> Move estrutura MF para Mysql
WRITE MY-REG *> Grava registro na tabela Mysql
IF DUPLICADO *> Teste se registro já estava cadastrado
MOVE ZEROS TO W-STATUS *> Evita encerramento prematuro caso registro já exista
ELSE
IF STAT-ERRO
DISPLAY "Erro gerando registro no Mysql, Staus *> Não conseguiu gerar o registro
- "[" W-STATUS "]" *> Retorna possível causa do erro
STOP RUN *> Encerra processo
END-IF
END-IF
END-READ
END-PERFORM.

CLOSE ARQMFS. *> Fecha os arquivos
CLOSE ARQMYS.

STOP RUN.


Abaixo imagem de como deve ser deifnida a tabela no Mysql:

.


Tabela equivalencias entre FD Cobol e Mysql

Assista apresentação de um aplicativo rodando

Download demonstração

Aos poucos estarei documentando melhor o demo, no momento serve para quem já tem um certo conhecimento. Qualquer dúvida entre em contato para conhecer algumas limitações.

Este recurso foi testado usando Cobol Micro Focus Versão 4.0.38, e Mysql 5.1.

Consulte também:

Micro Focus, fabricante do Cobol utilizado.

Mysql, fabricante do banco de dados utilizado.

Limitações conhecidas:

Redefinição de campos no COBOL é tratado no Mysql como um campo unico.

Maiores informações entre em contato pelo email franco@imediata.com.br inclua no subject "COBOL & MYSQL"
ou pelo fone: 5551 96031151

  IMEDIATA  |   Familia Stringari