ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Ferramentas para Migração Firebird X MySQL

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
Gene_sys
Novato
Novato


Registrado: Quarta-Feira, 7 de Outubro de 2015
Mensagens: 8

MensagemEnviada: Qua Mar 01, 2017 1:12 pm    Assunto: Ferramentas para Migração Firebird X MySQL Responder com Citação

Falai garotos e garotas de programa
Desenvolvi duas planilhas em Excel para me ajudarem a montar um integrador entre a retaguarda e um frente recém adquirido, essencialmente tinha que copular dados de um banco Firebird para um MySQL e fazer os retornos das vendas, como teria que repetir o processo para inumares tabelas acabei desenvolvendo-a, após ter acabado o projeto com a ajuda da planilha em um tempo bem reduzido já utilizei o método novamente em outra aplicação de migração de base de dados firebird x firebird as planilhas estão no link abaixo, como não foram feitas com o intuito comercial ou uso de terceiros dei umas ajustadasinhas e vou fazer um meio tutorial de seu uso aqui transpondo de um Firebird para um MySQL

https://1drv.ms/f/s!AsJbKMCu3n1Ij6EffNA7ynVgyi7XZA

O primeiro passo é ir a sua ferramenta de manutenção de banco e arrastar sua tabela para o editor de sql Name and type


copie essa lista e cole na planilha 2 "Tabela Destino"
[img]https://i58.servimg.com/u/f58/19/63/43/67/210.png1[/img]

repita o processo para a tabela de origem
no meu caso Firebird Name + Tipe


e colar agora na planilha 3 "Tabela_Origem_Firebird"


Vamos a nossa planilha geradora de SQL
ela deve estar mais ou menos assim


Configurando


Basicamente você deverá ter em seu projeto suas querys ligadas as suas respectivas bases de dados deixei quatro campos para para seus nomes, uma vez estes descritos vamos as tabelas


Selecione as tabelas de origem e destino e preencha os nomes das tabelas origem e destino, o tipo de sql desejado, você pode declarar também a quantidade de espaços para identação do código final.
Métodos e procedimentos
para integrar bancos você sempre terá que formatar campos ou alterar tipos então declare seu principais métodos e procedimentos que o fazem


note que em também declarei meus valores default para métodos com os mesmos
terminando isso vamos as amarrações de banco e métodos e condições
ex:


Note que meu campo ID e um campo integer e meu campo código é string de forma que eu preciso de um método de conversão StrToInt , Outra coisa e que determinei que este campo faz parte da minhas condições ou é meu índice da tabela. Note também que eu tenho um método implementado em meu código chamado Sonumeros, eu o uso para formatar meu CPF antes de passa-lo. Também simulei a entrada de um valor fixo para um campo que digamos que não exista em sua base de origem.
Tendo procedido estes passos a sua SQL está montada usando os campos que foram amarrados, tendo duas opções UPDATE ou INSERT, já considerando os métodos e tamanhos dos campos string de destino, quando maiores que os campos de origem. também com o espaço inicial de identação.

UPDATE duas sqls serão montadas tanto a de origem quanto a de destino
QrAba.Close;
QrAba.SQL.Clear;
QrAba.SQL.Add('Select codigo,nome,apelido,email,rg,cpf');
QrAba.SQL.Add(' From C000007 Where codigo = :codigo');
QrAba.ParamByName('codigo').AsString := SuaQuery.FieldByName('codigo').AsString;
QrAba.Open;

QrExecFrente.Close;
QrExecFrente.SQL.Clear;
QrExecFrente.SQL.Add('Select ID,NOME,FANTASIA,EMAIL,CPF_CNPJ,RG,ORGAO_RG');
QrExecFrente.SQL.Add('');
QrExecFrente.SQL.Add(' From cliente Where ID = :ID');
QrExecFrente.ParamByName('`ID`').AsInteger := QrAba.FieldByName('codigo').AsString;
QrExecFrente.Open;

QrExecFrente.Edit;
QrExecFrente.FieldByName('ID').AsInteger := StrToInt(QrAba.FieldByName('codigo').AsString);
QrExecFrente.FieldByName('NOME').AsString := QrAba.FieldByName('nome').AsString;
QrExecFrente.FieldByName('FANTASIA').AsString := QrAba.FieldByName('apelido').AsString;
QrExecFrente.FieldByName('EMAIL').AsString := QrAba.FieldByName('email').AsString;
QrExecFrente.FieldByName('CPF_CNPJ').AsString := Copy(sonumeros(QrAba.FieldByName('cpf').AsString),1,20);
QrExecFrente.FieldByName('RG').AsString := Copy(QrAba.FieldByName('rg').AsString,1,20);
QrExecFrente.FieldByName('ORGAO_RG').AsString := 'SPTC';
QrExecFrente.Post;

INSERT Sql única de inserção
QrExecFrente.Close;
QrExecFrente.SQL.Clear;
QrExecFrente.SQL.Add('INSERT INTO cliente(');
QrExecFrente.SQL.Add('`ID`,`NOME`,`FANTASIA`,`EMAIL`,`CPF_CNPJ`,');
QrExecFrente.SQL.Add('`RG`,`ORGAO_RG`');
QrExecFrente.SQL.Add(') VALUE (');
QrExecFrente.SQL.Add(':ID,:NOME,:FANTASIA,:EMAIL,:CPFCNPJ,');
QrExecFrente.SQL.Add(':RG,:ORGAORG);');

QrExecFrente.ParamByName('ID').AsInteger := StrToInt(QrAba.FieldByName('codigo').AsString);
QrExecFrente.ParamByName('NOME').AsString := QrAba.FieldByName('nome').AsString;
QrExecFrente.ParamByName('FANTASIA').AsString := QrAba.FieldByName('apelido').AsString;
QrExecFrente.ParamByName('EMAIL').AsString := QrAba.FieldByName('email').AsString;
QrExecFrente.ParamByName('CPFCNPJ').AsString := Copy(sonumeros(QrAba.FieldByName('cpf').AsString),1,20);
QrExecFrente.ParamByName('RG').AsString := Copy(QrAba.FieldByName('rg').AsString,1,20);
QrExecFrente.ParamByName('ORGAORG').AsString := 'SPTC';
QrExecFrente.ExecSQL;

OBS: As planilhas estão protegidas para evitar apagar campos de calculo mas na verdade estão sem senha. ou seja a senha é em branco.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB