Clipper On Line • Ver Tópico - DBF pra MySQL
Mudar para estilo Clássico
Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.
Postar uma resposta

DBF pra MySQL

07 Set 2019 12:08

Eu ainda não sei como vou fazer o acesso simultâneo pesado, mas enquanto isso... fazer mais algumas alterações.
Até agora, passei pra MYSQL e eliminei de DBF, mas.... chegando nos que isso complica e/ou deixaria lento.
Ainda não sei se vou duplicar TUDO, ou se continuar movendo...

Fazer agora o de notas fiscais, porque é o que menos é acessado pra gravação/atualização por usuários.
Mas pode ser muito usado em relatórios, e outras rotinas....
Vou começar e ver o que dá, dependendo do que acontecer, decidir o que fazer.

Vou começar agora.
Mostrar o passo a passo, conforme for fazendo.
A intenção é..... SEMPRE poder atualizar no cliente, não importa se terminei ou não.

Primeira alteração:

Confirmar se a base está criada no MySQL, e se tem a estrutura adequada.
Faz tanto tempo, que não faço idéia de como isso está no MySQL.
Para isso, usar os backups de cliente que tenho aqui, pra comparar.

No cliente... tanto faz se existir ou não a tabela no MySQL, então, antes ou depois da alteração, continuará tudo funcionando normalmente.
Com certeza no MySQL vai ter o campo incremental como chave principal, campo que não existe no DBF.

DBF pra MySQL

07 Set 2019 12:11

Recebo backup por ftp de alguns, vão ser os cobaias para o teste.
O Backup inclui DBF e MySQL.

backupfpt.png

DBF pra MySQL

07 Set 2019 12:25

Do FTP para a pasta de backups, da pasta de backups instalando na pasta de trabalho de cada empresa.

backupdbf.png


Antes de restaurar no MySQL.... pausa pro almoço.... rs

DBF pra MySQL

07 Set 2019 18:54

Backup restaurado também no MySQL.
Tudo pronto.
São backups de cliente, neles está assim: parte DBF e parte MySQL.
Retomando a migração.
Talvez melhor fazer logo tudo que falta de uma vez.... vamos ver...

mysql.png

DBF pra MySQL

07 Set 2019 19:01

Fugindo um pouco do assunto inicial...
Registrando o imposto dos XMLs que passam pelos aplicativos.

cbenef.png


Alguns fornecedores já vém usando o tal código de beneficiamento.
Apenas curiosidade, talvez agora comece a olhar isso com outra finalidade.

DBF pra MySQL

07 Set 2019 19:59

Pois é... como pode CST 20, com redução, não ter redução? sefazclass não estava pegando....

cbenef.png


Interessante.
Parece que podemos padronizar TODOS os aplicativos e não vimos antes.
E mostra que o CEST foi uma invenção furada, que agora poderia ser jogado no lixo.
O CBENEF substitui muito bem o CEST, apesar que o governo pode manter pra validação, ou pra não admitir que cagou.

DBF pra MySQL

07 Set 2019 20:13

Mas ainda tem alguma coisa errada...
CEST não é pra produto com substituição tributária? cadê ela?

DBF pra MySQL

08 Set 2019 02:00

"Atualizando versão" na minha máquina.
Faltam essas empresas.

Carregou o aplicativo, já simultâneo com notas em DBF e MySQL.
Tanto faz consultar notas em DBF ou MySQL.

conversao.png


Agora dá pra dar uma olhada em cada módulo que usa, já alterar pra MySQL.
Se não der pra usar sem relacionamento com outras tabelas, a saída vai ser fazer o mesmo com outras tabelas.
Se instalar nos clientes agora.... não vão usar as notas do MySQL, mas vai estar tudo salvo em DBF + MySQL.

Tem alguma vantagem duplicar tudo?
Sim.
Vou ter tempo de sobra pra atualizar o aplicativo.
E em caso de problemas, vai ser apenas salvar novamente no MySQL (depois de corrigir o possível problema, lógico).

Pensando bem.... avaliar em fazer isso logo com tudo que é tabela, assim acelera o processo, e não precisa fonte intermediário.

DBF pra MySQL

08 Set 2019 02:16

mysql.png


Não tinha reparado nisso antes.
240MB de DBF ocupando 61MB de MySQL.
É lógico... no MySQL podemos usar o campo VARCHAR, e com isso não grava espaço em branco.
Pois é... mais outra vantagem... economiza disco, rede, internet, etc.

Fico imaginando se a RDDSQL ou similares tiram proveito disso ao trabalhar igual DBF....

DBF pra MySQL

09 Set 2019 18:32

Como não estava usando essas tabelas, faltava ajustar estrutura...
Ao contrário de DBF.... só acrescentar campos...

Código:
      IF ! :FieldExists( "NFFCPVAL", "JPNOTA" )
         :AddField( "NFFCPVAL", "JPNOTA", "DOUBLE(14,2) NOT NULL DEFAULT '0'" )
      ENDIF
      IF ! :FieldExists( "NFAVENUM", "JPNOTA" )
         :AddField( "NFAVENUM", "JPNOTA", "VARCHAR(40) NOT NULL DEFAULT ''" )
      ENDIF
      IF ! :FieldExists( "NFAVEPRO", "JPNOTA" )
         :AddField( "NFAVEPRO", "JPNOTA", "VARCHAR(40) NOT NULL DEFAULT ''" )
      ENDIF
      IF ! :FieldExists( "NFMODFIS", "JPNOTA" )
         :AddField( "NFMODFIS", "JPNOTA", "VARCHAR(2) NOT NULL DEFAULT ''" )
      ENDIF
      IF ! :fieldExists( "NFCADEMI", "JPNOTA" )
         :AddField( "NFCADEMI", "JPNOTA", "VARCHAR(6) NOT NULL DEFAULT ''" )
      ENDIF
      IF ! :FieldExists( "IPPEDCOM", "JPITPED" )
         :AddField( "IPPEDCOM", "JPITPED", "VARCHAR(6) NOT NULL DEFAULT ''" )
      ENDIF
      IF ! :FieldExists( "IPFCPALI", "JPITPED" )
         :AddField( "IPFCPALI", "JPITPED", "DOUBLE(6,2) NOT NULL DEFAULT '0'" )
      ENDIF
      IF ! :FieldExists( "IPFCPVAL", "JPITPED" )
         :AddField( "IPFCPVAL", "JPITPED", "DOUBLE(14,2) NOT NULL DEFAULT '0'" )
      ENDIF
      IF ! :FieldExists( "IPNUMLAN", "JPITPED" )
         :AddField( "IPNUMLAN", "JPITPED", "VARCHAR(6) NOT NULL DEFAULT ''" )
      ENDIF

DBF pra MySQL

09 Set 2019 18:42

E transferir tabela para o MySQL.
Como precaução, caso misturem versões, ou carreguem o aplicativo trocando versão, testo se a base está vazia antes de começar a transferir.

Código:
STATIC FUNCTION jpnotaToMySql()

   LOCAL cnMySql := ADOClass():New( AppcnMySqlLocal() )

   IF AppcnMySqlLocal() == NIL
      RETURN NIL
   ENDIF
   WITH OBJECT cnMySql
      :cSql := "SELECT COUNT(*) AS QTD FROM JPNOTA"
      IF :ReturnValueAndClose( "QTD" ) == 0
         CopyDbfToMySql( "JPNOTA", .T. )
      ENDIF
   ENDWITH
   CLOSE DATABASES

   RETURN NIL


Pronto, notas fiscais em MySQL, sendo atualizadas em simultâneo.

Agora decidir se começo a remover esse DBF do aplicativo, ou se transfiro outros também, assim já removo vários de uma vez.

Porque o arquivo de notas?
Pouca atualização simultânea, ou quase nenhuma, e é um dos maiores DBFs.

Como eu já disse antes, ainda não sei como vou fazer o simultâneo no MySQL, então deixando pro final o que vai precisar de um "algo mais".

Também não decidi sobre relacionamento entre tabelas, e nem pesquisei como fazer.

DBF pra MySQL

16 Set 2019 09:39

Tanta discussão sobre como acessar o MySQL e esqueci um detalhe importantíssimo:

Se o backup do MySQL chegar a 4GB, não tem como fazer pelo Harbour 32 bits.
Compilar com 64 bits não é problema, o problema é se todas as máquinas vão aceitar isso.

DBF pra MySQL

17 Set 2019 14:53

Ola!
Pq vc não replica os dados ?
Espelhamento ?
https://imasters.com.br/data/replicacao-mysql-em-5-minutos

Saudações,
Itamar M. Lins Jr.

DBF pra MySQL

17 Set 2019 15:05

Itamar M. Lins Jr. escreveu:Pq vc não replica os dados ?


A idéia é boa, mas só vale pra quando temos acesso total ao servidor por internet, e ao servidor MySQL.

DBF pra MySQL

20 Set 2019 20:18

Até agora tudo tranquilo.
Tive problemas, mas por outras alterações que fiz junto.

É que antes guardava cópia de XML na pasta do aplicativo: aplicativo\xml\anomes
São inúteis agora, porque já estão salvos em outro lugar.

Como sou meio paranóico com isso....
Se estão lá até há mais de um ano, porque eu preciso ter pressa em apagar?
Acrescentei pro próprio aplicativo ir pegando esses XMLs, conferindo se realmente estão salvos, e ir apagando do disco.
Um pouco por vez.
Se vai demorar um mês ou mais... tanto faz... vai ser automático, vai ser seguro e não vai atrapalhar o usuário.
Postar uma resposta