Acessar Database via: |
---|
Comandos nativos Cobol. Comandos SQL. |
Links |
|
Serviços |
Franco Stringari Pudler
|
Aplicativos |
IMEDIATA Inform.Empres.Ltda
|
O EXTMYSQL é um programa que ira substituir "EXTFH" ou o "FHREDIR" da mesma forma com que é feito para tratamento para arquivos acessados via "FILESHARE ".
Um aplicativo usando o EXTMYSQL pode acessar simultaneamente arquivos MF, arquivos MF via fileshare, e ainda arquivos MYSQL, adotando a mesmas e syntax para todos.
Da mesma forma que é feito no fileshare, onde é informado "$$servidor" para que o FHREDIR busque este arquivo no servidor do FILESHARE, o EXTMYSQL identifica atravéz do parametro informado no label "@IP@PORTA@USER@PASW@DB@TABEL" que se trata de um arquivo que devera ser acessado via MySql, quanto aos demais arquivos, simplesmente devolve o controle para o FHREDIR que por sua vez, se encarrega de fazer o acesso normalmente como sempre foi feito.
Em sendo assim, basta informar o label do arquivo, atendendo esta regra, para que todos recursos e beneficios descritos anterirmente, passem a estar disponíveis.
Para manter a compatibilidade, os códigos de status, continuam os mesmos, apenas foram
adicionados novos códigos para tratamento de casos específicos conforme abaixo:
Status | Descrição | Solução |
9 e 48 | Heap access failure - out of buffers | Erro no tratamento de arquivo virtual para gerenciamento interno. |
9 e 49 | Heap deallocated while program inactive | |
9 e 50 | Backing-file failure: too many files | |
9 e 51 | Backing-file failure: file access denied | |
9 e 52 | Backing-file failure: I/O failure | |
51 | Erro na conexão com o banco de dados atravéz da LIBMYSQL.DLL | Certifique-se de ter a LIBMYSQL.DLL disponível |
53 | Não foi possível interpretar campos definidos na tabela e montar correspondência na FD. | Certifique-se de que todos campos usados na tabela estão corretamente definidos, e que os mesmos possuem correspondência, de acordo com tabela fornecida anteriormente. |
91 | Erro na montagem da estrutura da FD, falha montando campos. | Idem 53. |
200 | Erro com a execução de comando da LIBMYSQL confira Logimed.log | |
201 | Conexão com servidor perdida. | Verifique condições da rede e disponibilidade de INTERNET, cado esteja operando via WEB. |
9 e 4 | Não encontrou no DB tabela procurada "Illegal file name." |
Comando | Descrição |
---|---|
Passa ao Servidor Mysql comandos adicionais que serão usados no próximo START. |
|
Passa ao Servidor Mysql parametros adicionais afetando a classificação do resultado gerado pelo comando START. |
|
Retorna numa variável a STRING do comando enviado ao servidor MySql. |
|
Força a geração de um registro no LOGIMED.LOG contendo o comando enviado ao servidorMysql. |
|
Envia ao servidor Mysql uma string contendo comandos e parametros a serem executados. |
|
Altera configuração do comando START a ser passado para o Mysql, de modo a definir qual campo numa chave composta deve ser tratado como guia, evitando a geração de uma pesquisa extremamente longa. |
|
Retorna a thread da conexão onde foi executado o ultimo comando. |
|
Executa o comando Mysql mysql_real_escape_string. |
|
Redefine o tempo de bloqueio do registro em segundos. |
|
Retorna mensagem de erro. |
|
Gera em LOGIMED.LOG a relação de todas as tabelas(arquivos) em aberto. |
|
Retorna numero de arquivos Mysql e MF abertos. |
|
Estabelece uma conexão independente com o Mysql |
|
Envia ao Mysql, STRING contendo comando e parametros a serem executados na conexão extabelecida pelo comando MysqlConecta. |
|
Envia ao Mysql, STRING contendo comando e parametros a serem executados na conexão extabelecida pelo comando MysqlConecta. |
|
Libera o cursor criado pelo MysqlComando, liberando recursos alocados, e principalmente libera memória. |
|
Libera a conexão estabelecida pelo MysqlConecta, liberando recursos alocados, e principalmente libera memória. |
|
Executa um comando SQL vinculado ao FCD de um determinado arquivo. |
|
Possibilita configurar dinamicamente o tamanho em numero de registros da página usada em comandos de leitura. |
Esta rotina tem fundamental importância, tendo em vista a filosofia adotada pelo banco de dados ser totalmente diferente da adotada pelos arquivos MF, onde no MF a filtragem é feita após a leitura de cada registro, e no banco de dados esta filtragem é feita pelo servidor, o que em uma base de dados com muitos registros, implica numa significativa demora, até concluir a montagem de todos registros selecionados.
A vantagem da forma adotada pelo banco de dados, esta no fato de reduzir drasticamente o volume de trafego na rede, onde só serão lidos os registros válidos, por outro lago o servidor precisa montar toda a pesquisa antes de liberar o primeiro registro.
Outra grande vantagem é o fato de se poder usar qualquer campo da tabela nesta filtragem.
Compatibilidade. Sem efeito quando acessando arquivo MF tradicional,
simplesmente sera ignorado.
Possibilita com que o servidor faça a filtragem, antes de iniciar a retornar os registros,
o que será feito nos comandos "READ"subsequentes.
Neste caso o "START" manda o comando "SELECT"
para o servidor MYSQL, para depois os comandos "READ"
executarem o comando "FETCH", dando acesso aos registros préviamente
selecionados.
Informe na STRING W-WHERE apenas os parametros de filtragem, tendo o cuidado de manter entre
"`" os nomes dos campos, e "'" os valores que serão usados como referencia
para filtragem.
CALL "MontaWhere" USING W-WHERE.
Onde W-WHERE PIC X(2048).
No exemplo ao lado, após o START sertão lidos apenas os registros cujos campos MY-DTA seja = 20120202 e MY-HST tenham a string PAGO, respeitando a classificação determinada pela chave usada no comando START.
WORKING-STORAGE SECTION. 77 W-WHERE PIC X(2048). . . . PROCEDURE DIVISION. . . . MOVE Z"`MY-DTA` = '20120202' AND `MY-HST` - " LIKE 'PAGO%'" TO W-WHERE CALL "MontaWhere" USING W-WHERE START ARQMYS KEY IS NOT LES MY-LAN PERFORM UNTIL STATUS-ERRO READ ARQMYS NEXT RECORD NOT AT END . . .
Esta rotina possibilita afetar a forma com que os registros serão classificados após o START. Caso não seja usada, os registros retornarão na ordem definida pela chave selecionada no START. Caso a classificação dos mesmos não seja necessária, basta chamar a rotina passando LOW-VALUES, que não será feita nenhuma classificação, compensando em ganho de velocidade na montagem inicial, este ganho só será perceptível após um determinado volume de registros.
Compatibilidade. Sem efeito quando acessando arquivo MF tradicional, simplesmente sera ignorado.
CALL "MontaOrder" USING W-ORDER.
Onde W-ORDER PIC X(1024).
Ex.:
No exemplo, após o START sertão lidos todos os registros, mas apesar de o comando START ter definido a chave MY-DTA como chave para acessar o cadastro, os registros serão lidos na rodem definida na string W-ORDER. O acesso pelo servidor será pela chave definida pelo START, mas após selecionar os registros válidos o MYSQL classificarta os mesmos para aliberá-los na sequencia definda no W-ORDER.
WORKING-STORAGE SECTION. 77 W-ORDER PIC X(1024). . . . PROCEDURE DIVISION. . . . MOVE Z"`MY-HST` ASC, `MY-DTA` DESC" TO W-ORDER CALL "MontaOrder" USING W-ORDER START ARQMYS KEY IS NOT LES MY-LAN PERFORM UNTIL STATUS-ERRO READ ARQMYS NEXT RECORD NOT AT END . . .
A importância desta rotina esta na facilidade de já se acessar o cadastro na ordem desejada, podendo ser usado qualquer campo da tabela, ou até mesmo combinação de campos.
Esta rotina retornará toda string enviada ao servidor, pode ser usada debugando um programa, ou armazenando seu conteúdo como quiser.
Compatibilidade. Sem efeito quando acessando arquivo MF tradicional, simplesmente sera ignorado.
Syntax
CALL "RetornaCmd" USING W-CMD.
Onde W-CMD PIC X(64000).
Ex.:
No exemplo, após o START o comando carrega em W-CMD a string passada para o MYSQL para executar o START.
WORKING-STORAGE SECTION. 77 W-CMD PIC X(64000). . . . PROCEDURE DIVISION. . . . START ARQMYS KEY IS NOT LES MY-LAN CALL "RetornaCmd" USING W-CMD PERFORM UNTIL STATUS-ERRO READ ARQMYS NEXT RECORD NOT AT END . . .
A importância desta rotina esta na facilidade em debugar determinados comando, ou aperfeiçoa-los de forma a obter melhores resultados inclusive em termos de desempenho.
Compatibilidade. Sem efeito quando acessando arquivo MF tradicional, simplesmente sera ignorado.
Syntax
CALL "SalvaCmd" USING W-CMD.
Onde W-CMD PIC X(64000).
Ex.:
No exemplo, após o START o comando carrega em W-CMD a string passada para o MYSQL para executar o START, salva seu conteúdo no Log.
WORKING-STORAGE SECTION. 77 W-CMD PIC X(64000). . . . PROCEDURE DIVISION. . . . START ARQMYS KEY IS NOT LES MY-LAN CALL "SalvaCmd" USING W-CMD PERFORM UNTIL STATUS-ERRO READ ARQMYS NEXT RECORD NOT AT END . . .
A importância desta rotina esta na facilidade em debugar determinados comando, ou aperfeiçoa-los de forma a obter melhores resultados inclusive em termos de desempenho.
Compatibilidade. Só usar caso tenha pelo menos um arquivo aberto.
Syntax
CALL "MysqlQuery" USING W-CMD W-HANDLE.
Onde W-CMD PIC X(64000).
e W-HANDLE POINTER.
Ex.:
Tendo acesso a esta rotina é possível executar qualquer comando do MYSQL independente dos executados via comando tradicionais, tipo READ, START ETC...
Ao lado segue um exemplo de programa que retorna o numero de registros numa determinada tabela.
A importância desta rotina esta na facilidade em acessar qualquer outro comando do MYSQL.
Para executar esta rotina, é necessário ja haver um arquivo aberto (estabelece uma conexão), e o comando será executado vinculado a conexão do ultimo acesso feito via READ, START, OPEN etc...
Compatibilidade. Sem efeito quando acessando arquivo MF tradicional, simplesmente sera ignorado.
Syntax
CALL "IgualaCmp" USING W-IGLKEY.
Onde W-IGLKEY PIC X(1) COMP-X.
Valores:
Valor | Função |
---|---|
1 | Força com que o primeiro campo da chave seja igual. |
2 | Força com que o segundo campo da chave seja igual. |
4 | Força com que o terceiro campo da chave seja igual. |
8 | Força com que o quarto campo da chave seja igual. |
16 | Força com que o quinto campo da chave seja igual. |
32 | Força com que o sexto campo da chave seja igual. |
64 | Força com que o setimo campo da chave seja igual. |
128 | Força com que o oitavo campo da chave seja igual. |
Ex.
Chave
SELECT CADASTRO ASSIGN TO DYNAMIC W-LABEL ORGANIZATION IS INDEXED ACCESS MODE IS DYNAMIC FILE STATUS IS ESTADO LOCK MODE IS MANUAL RECORD KEY IS CD-CHA = CD-COD CD-FIL CD-SET ALTERNATE RECORD KEY IS CD-DSC = CD-DES CD-FIL CD-GRU WITH DUPLICATES ALTERNATE RECORD KEY IS CD-KAR = CD-COD CD-FIL CD-TAM CD-COR CD-MAT WITH DUPLICATES.
Situação
Ex.:
Quero ler a partir do registro CD-COD=1, CD-FIL=3, CD-SET=2 da chave principal:
Sendo que me interessam apenas os registros onde CD-FIL = 3, neste caso:
MOVE 1 TO CD-COD MOVE 3 TO CD-FIL MOVE 2 TO CD-SET MOVE 2 TO W-IGLKEY CALL "IgualaCmp" USING W-IGLKEY START CADASTRO KEY IS NOT LESS THAN CD-CHA PERFORM UNTIL STATUS-ERRO READ CADASTRO NEXT RECORD NOT AT END . .
equivale a
START CADASTRO KEY IS NOT LESS THAN CD-CHA PERFORM UNTIL STATUS-ERRO READ CADASTRO NEXT RECORD NOT AT END IF CD-FIL NOT = 3 MOVE "10" TO ESTADO ELSE . .
Também é possível a combinação de mais de um campo sendo usado para tratar a igualdade.
Ex.:
MOVE 1 TO W-IGLKEY ADD 2 TO W-IGLKEY ADD 8 TO W-IGLKEY
Faz com que o primeiro, segundo e quarto campo da chave composta sejam tratados pela igualdade aos valores informados na FD quando for executado o START.
O principal motivo para criaação desta rotina é reduzir o impacto da diferença da forma com que o acesso é tratado no banco de dados com relação aos arquivos MF.
No MF, logo após o START, imediatamente é executado o comando READ, enquanto que num banco de dados, a primeira leitura só ira ocorrer após o servidor ter montado toda a pesquisa, e de acordo com a filtragem pré informada.
Desta forma é possível, com um pequeno impacto no fonte, solucionar algumas situações que por ventura venham a surgir, onde em função de um grande numero de registros, o comando READ demore mais tempo do que o tolerável para ser executado.
Esta rotina possibilita que se reduza significativamente o universo de registros que serão acessados pelo servidor, até que conclua a montagem da consulta solicitada.
É óbvio que o uso destas rotinas apesar de vantajosas, afetam a compatibilidade com o projeto original, uma vez que estes recursos não estão disponíveis nos acessos via arquivos MF, apesar de o EXTMYSQL ignorá-los, no caso de o arquivo não ser MYSQL.
Uma vez aberto pelo menos um arquivo no MYSQL, estara disponível ao usuario uma conexão com o banco de dados.
Compatibilidade. Sem efeito quando acessando arquivo MF tradicional, simplesmente sera ignorado.
CALL "GetThread" USING W-THREAD.
Onde W-THREAD PIC 9(09) COMP-5.
Ex.:
WORKING-STORAGE SECTION. 77 W-THREAD PIC 9(09) COMP-5. . . . PROCEDURE DIVISION. . . . CALL "GetThread" USING W-THREAD . . .
Compatibilidade. Sem efeito quando acessando arquivo MF tradicional, simplesmente sera ignorado.
CALL "LimpaString" USING W-BUFFER W-TMN.
Onde W-TUFFER PIC X(XX).
W-TMN PIC 9(09) COMP-5.
Ex.:
WORKING-STORAGE SECTION. 77 W-TMN PIC 9(09) COMP-5. 77 W-BUFFER PIC X(1024). . . . PROCEDURE DIVISION. . . . MOVE LENGTH OF W-BUFFER TO W-TMN. CALL "LimpaString" USING W-BUFFER W-TMN. . . .
Compatibilidade. Sem efeito quando acessando arquivo MF tradicional, simplesmente sera ignorado.
CALL "LockTime" USING W-TMP.
Onde W-TMP PIC 9(09) COMP-5.
Ex.:
WORKING-STORAGE SECTION. 77 W-TMP PIC 9(09) COMP-5. . . . PROCEDURE DIVISION. . . . MOVE 1800 TO W-TMP. CALL "LockTime" USING W-TMP. . . .
Compatibilidade. Sem efeito quando acessando arquivo MF tradicional, simplesmente sera ignorado.
CALL "GetLstMsgErr" USING W-ERRO.
Onde W-ERRO PIC X(1024).
Ex.:
WORKING-STORAGE SECTION. 77 W-ERRO PIC X(1024). . . . PROCEDURE DIVISION. . . . CALL "GetLstMsgErr" USING W-ERRO. . . .
Compatibilidade. Sem efeito quando acessando arquivo MF tradicional, simplesmente sera ignorado.
CALL "ListTableOpen".
Onde W-THREAD PIC 9(09) COMP-5.
Ex.:
WORKING-STORAGE SECTION. . . . PROCEDURE DIVISION. . . . CALL "ListTableOpen". . . .
Compatibilidade. Sem efeito quando acessando arquivo MF tradicional, simplesmente sera ignorado.
CALL "NumArquivos" USING W-NUMF W-NUMY.
Onde W-NUMF PIC X(04) COMP-5.
W-NUMY PIC X(04) COMP-5.
Ex.:
WORKING-STORAGE SECTION. 77 W-NUMF PIC X(04) COMP-5. 77 W-NUMY PIC X(04) COMP-5. . . . PROCEDURE DIVISION. . . . CALL "NumArquivos" USING W-NUMF W-NUMY. . . .
Sempre que o EXTMYSQL é usado para acessar uma base de dados no Mysql é criado a tabela IMELOG, que serve para armazenar o log de cada comando executado, com todos seus parametros, possibilitando a reconstrução de uma base a partir destes comandos.
Compatibilidade. Sem efeito quando acessando arquivo MF tradicional, simplesmente sera ignorado.
CALL "LogArquivos" USING W-TLOG.
Onde W-TLOG PIC 9(01).
W-NUMY PIC X(04) COMP-5.
Ex.:
WORKING-STORAGE SECTION. 77 W-TLOG PIC 9(01). . . . PROCEDURE DIVISION. . . . CALL "LogArquivos" USING W-TLOG. . . .
Ao estabelecer uma conexão com o servidor Mysl, retorna o handle da conexão estabelecida, que deverá
ser usado nos comandos a serem executados nesta conexão.
Retorna da mesma forma o STATUS da operação, sendo "00" caso bem sucedida.
Compatibilidade. Sem efeito quando acessando arquivo MF tradicional, simplesmente sera ignorado.
Ex.: Vide programa demoCALL "MysqlConecta" USING W-ARQUIVOS W-CONEXAO W-STATUS.
WORKING-STORAGE SECTION. 77 W-ARQUIVOS PIC X(128). 77 W-STATUS PIC X(02). 01 W-CONEXAO USAGE POINTER. . . . PROCEDURE DIVISION. . . . MOVE "@127.0.0.1@3306@root@@test@cadtst" TO W-ARQUIVOS. CALL "MysqlConecta" USING W-ARQUIVOS *> Variavel com os parametros para estabelecer a conexão W-CONEXAO *> Retorna handle para encontrar a FCD-AREA da conexão W-STATUS. *> Status de retorno . . .
Compatibilidade. Sem efeito quando acessando arquivo MF tradicional, simplesmente sera ignorado.
Ex.: Vide programa demoCALL "MysqlComando" USING W-CONEXAO *> Handle para recuperar FCD-AREA W-COMANDO *> Comando a ser executado W-CURSOR *> Handle do retorno do comando W-QRTM *> Tamanho do comando a ser executado W-STATUS. *> Status de retorno
WORKING-STORAGE SECTION. 77 W-COMANDO PIC X(64000). 77 W-STATUS PIC X(02). 77 W-QRTM PIC 9(09) COMP-5. 01 W-CONEXAO USAGE POINTER. 01 W-CURSOR USAGE POINTER. . . . PROCEDURE DIVISION. . . . STRING "SELECT cadtst.tstlan, cadtst.tstvl1, cadtst.tstvl2, " "cadtst.tstvl3, cadtst.tstvl4, cadtst.tstvl5, " "cadtst.tstch1, cadtst.tstch2 FROM cadtst" DELIMITED BY SIZE INTO W-COMANDO WITH POINTER W-QRTM. CALL "MysqlComando" USING W-CONEXAO *> Variavel com os parametros para estabelecer *> a conexão. Retornado do comando MysqlConecta W-COMANDO *> String contendo a instrução Mysql W-CURSOR *> Retorna handle (cursor), resultado do comando executado. W-QRTM *> Tamanho da instrução sendo enviada ao Mysql W-STATUS *> Retorna Status de retorno (resultado) do comando . . .
Retorna em W-STATUS o status do comando executado conforme tabela de FS do COBOL.
Compatibilidade. Sem efeito quando acessando arquivo MF tradicional, simplesmente sera ignorado.
Ex.: Vide programa demoCALL "MysqlRetorna" USING W-CONEXAO *> Handle para recuperar FCD-AREA W-CURSOR *> Endereço estrutura do retorno (cursor) W-QRTM *> Tamanho do buffer sendo retornado W-STATUS *> Status de retorno W-RESULT. *> Buffer contendo o resultado sendo retornado. Ter cuidado no programa
WORKING-STORAGE SECTION. 77 W-RESULT PIC X(64000). 77 W-STATUS PIC X(02). 77 W-QRTM PIC 9(09) COMP-5. 01 W-CONEXAO USAGE POINTER. 01 W-CURSOR USAGE POINTER. 01 WS-REG. 02 WS-LAN PIC S9(10). 02 WS-CL1 PIC S9(07). 02 WS-CL2 PIC S9(06). 02 WS-CL3 PIC S9(07)V99. 02 WS-CL4 PIC S9(05). 02 WS-CL5 PIC S9(05)V9999. 02 WS-CH1 PIC X(10). 02 WS-CH2 PIC X(50). . . . PROCEDURE DIVISION. . . . IF W-CURSOR NOT = NULL CALL "MysqlRetorna" USING W-CONEXAO *> Handle para recuperar FCD-AREA W-CURSOR *> Endereço estrutura do retorno (cursor) W-QRTM *> Tamanho do buffer sendo retornado W-STATUS *> Status de retorno W-RESULT. *> Buffer contendo o resultado sendo retornado. Ter cuidado no programa MOVE W-RESULT TO WS-REG *> Move o resultado para uma estrututa . . .
Compatibilidade. Sem efeito quando acessando arquivo MF tradicional, simplesmente sera ignorado.
Ex.: Vide programa demoCALL "MysqlLiberaCursor" USING W-CONEXAO *> Handle para recuperar FCD-AREA W-CURSOR. *> Endereço estrutura do retorno (cursor)
WORKING-STORAGE SECTION. 01 W-CONEXAO USAGE POINTER. 01 W-CURSOR USAGE POINTER. . . . PROCEDURE DIVISION. . . . CALL "MysqlLiberaCursor" USING W-CONEXAO W-CURSOR. *> Handle para encontrar a FCD-AREA desta conexão . . .
Compatibilidade. Sem efeito quando acessando arquivo MF tradicional, simplesmente sera ignorado.
Ex.: Vide programa demoCALL "MysqlDesConecta" USING W-CONEXAO *> Handle para recuperar FCD-AREA W-CURSOR *> Endereço estrutura do retorno (cursor) W-STATUS *> Status de retorno do comando
WORKING-STORAGE SECTION. 01 W-CONEXAO USAGE POINTER. 01 W-CURSOR USAGE POINTER. 01 W-STATUS PIC X(02) . . . PROCEDURE DIVISION. . . . CALL "MysqlDesConecta" USING W-CONEXAO W-CURSOR *> Handle para encontrar a FCD-AREA desta conexão W-STATUS. . . .
Compatibilidade. Sem efeito quando acessando arquivo MF tradicional, simplesmente sera ignorado.
Ex.:CALL "MysqlQueryFCD" USING CADASTRO-FCD *> Passa area de parametros do arquivo "CADASTRO" W-COMANDO *> Comando SQL a ser executado W-HANDLE. *> Caso comando SQL retporne resultado, o endereço para
$set fcdreg SELECT CADASTRO ASSIGN TO DYNAMIC W-LABEL ORGANIZATION IS INDEXED ACCESS MODE IS DYNAMIC FILE STATUS IS ESTADO RECORD KEY IS CD-KEY. . . . WORKING-STORAGE SECTION. 77 W-LABEL PIC X(128) VALUE Z"@127.0.0.1@3306@root@@imed@cadastro". 77 W-COMANDO PIC X(64000). 77 W-QRTM PIC 9(09) COMP-5. . . . 01 W-HANDLE USAGE POINTER. . . . LINKAGE SECTION. 01 CADASTRO-FCD. COPY XFHFCD.CPY. *> Estrutura usada pelo COBOL para fazer todos acessos a arquivos . . . . OPEN I-O CADASTRO. *> Ira recuperar a area de FCD do arquivo aberto logo acima. *> Posiciona a estrutura no endereço fornecido acima, com isso o programa passa a ter acesso a *> todas informaçõs necessários para o Cobol acessar o arquivo. SET ADDRESS OF CADASTRO-FCD TO ADDRESS OF fh--fcd OF CADASTRO. . . . *> Possibilita a leitura de registros gravados mas ainda não commitados. MOVE 1 TO W-QRTM. STRING "SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED" DELIMITED BY SIZE INTO W-COMANDO WITH POINTER W-QRTM. CALL "MysqlQueryFCD" *> Executa MysqlQuery na conexão e usando a estrutura *> de um arquivo préviamente aberto USING CADASTRO-FCD *> Passa area de parametros do arquivo "CADASTRO" W-COMANDO *> Comando SQL a ser executado W-HANDLE. *> Caso comando SQL retporne resultado, o endereço para . . . CLOSE CADASTRO.No exemplo ascima, ao fechar o arquivo via "CLOSE", não há mais necessidade de encerrar conexão nem cursor, o que é feito pelo próprio comando CLOSE.
Compatibilidade. Sem efeito quando acessando arquivo MF tradicional, simplesmente sera ignorado.
CALL "MysqlRetResult" USING W-CONEXAO *> Pointer retornado pelo comando MysqlConecta W-CURSOR *> Endereço estrutura onde esta cursor retornado *> pelo comando MysqlComando W-QRTM *> Tamanho do buffer sendo retornado W-STR *> Divisor do campo, terminado em X"00" W-TAM *> Tamanho do divisor W-STA *> Status de retorno W-REG. *> Buffer contendo o resultado sendo retornado. Ter cuidado no programa *> chamador para reservar espaço suficiente, para caber o retornoUSING W-CONEXAO *> Handle para recuperar FCD-AREA
77 W-QRTM PIC 9(09) COMP-5. . . . MOVE 99999 TO W-QRTM. CALL "MudaPaginacao" USING W-QRTM.Fara com que a rotina não mais adote a paginação a partir dos prósimos START.
Abaixo vamos relacionar algumas dicas, de como se obter melhores resultados, mas que antes de serem adotadas recomendamos estudo mais aprofundado quanto as consequencias de suas implementações.
Procure não usar nome de campo muito extenso, o espaço ocupado pelos nomes é compartilhado na string enviada ao Mysql, que além de trafegar na rede, tem uma limitação de 64000 posições.
Todo erro não tratado pela rotina gera um registro no log "LOGIMED.LOG", onde fica registrado o que se tentou fazer e o motivo informado pelo LIBMYSQL, na tentativa de facilitar a correção do mesmo.
Apesar da necessidade de que todas as chaves definidas no SELECT do COBOL estarem correspondentemente definidas na Tabela do MYSQL, o fato de termos mais chaves definidas nas tabelas do que no SELECT, não interfere na compatibilidade operacional do sistema. Neste caso, poderão ser definidas novas chaves sem que as mesmas estejam no SELECT do arquivo, desde que estejam depois da ultima chave definida no SELECT.
Dependendo da necessidade de acesso a uma tabela usando determinado campo (coluna), é recomendável inclui-lo como chave, tornando as pesquisas, onde houver filtragem por este campo, muito mais eficientes e rápidas.
A rotina "MontaOrder" tem se mostrado eficiente em pesquizas onde não ha necessidade de classificação do resultado, principalmente em rotinas que usam o SORT para classificar os registros lidos. Neste caso, antes de chamar a rotina, inicialize W-ORDER com Low-values.
Valem as mesmas regras para tratamento do desempenho das aplicadas no Mysql, mesmo que acessadas via comandos do COBOL, uma vez que internamente todo acesso é feito via banco de dados.
As rotinas aqui apresentadas foram desenvolvidas de tal forma que obtenham o mesmo resultado, caso passando ao Servidor Mysql. Para debugar o que esta sendo enviado para o Servidor, use a rotina ";SalvaCmd", que tem como finalidade deixar registrado o comando passado ao Servidor Mysql no arquivo LogImd.log.
Sempre que encontrar um erro, o mesmo será registrafo no arquivo LOGIMED.LOG, facilitando localizar a causa do erro.
A rotina EXTMYSQL faz validação dos campos não numéricos zerando sempre que encontrar valores fora do RANGE previamente estabelecido para o campo. Como em muitos caso de converção de dados do MF para o MYSQL, foram encontrados sugeuira, e o banco de dados não aceita tais situações, a rotina passou a tratar estes casos evitando desta forma interrupção sumária da execução
Vale todas limitações do banco de dados, no caso o o Mysql.
Bloqueio de registro é feito por tempo determinado, como não encontramos uma técnica padrão fornecida pelo banco de dados, o bloqueio de registro é feito por uma rotina desenvolvida por nós, o que mais se aproximou da forma com que tradicionalmente é feita pelo COBOL.
Tamanho do nome do campo na tabela não pode ser maior que 64 posições, o mesmo ocorre com o nome da chave.
Tamanho máximo da string de comunicaçãoo com o Mysql é de 64000 posições, compartilhado com o comando, nome da variável, e conteúdo da variável.
Caracteres especiais ou sugeira nos Campos CHAR, VARCHAR e BLOB tratam caracteres especiais com tamanho multiplicado por 3. Ex. campo contendo X"01", trafegara ocupando 3 posições na STRING de comando.
READ NEXT, READ PREVIOUS em sequencia. Da forma com que o SQL trata leitura de registros, é desaconselhavel o uso de comando READ ARQ NEXT RECORS com READ ARQ PREVIOUS, ou contrário.
Ex. Um START NOT LESS, no Mysql o servidor vai ler todos registros com chave = ou maior, para depois liberar o primeiro READ, e se logo após vc der um READ PREVIOUS, tudo denovo ao inverso.
Por outro lado, voce pode se valer do recurso "LIKE %STRING%" que é muito eficiente.