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:
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.