Cópia de dados entre bancos MySQL e SQLite Boa tarde. Gosta de copiar os dados de uma banco MySql em produção para um BD local SQLite. O problema é que na hora da cópia, tenho acesso apenas a transação do BD MySQL TTransaction::open('bd_online'); e para o BD local preciso abrir outra transação. Alguma luz nesse caso? Obrigado!...
GS
Cópia de dados entre bancos MySQL e SQLite  
Boa tarde.

Gosta de copiar os dados de uma banco MySql em produção para um BD local SQLite.

O problema é que na hora da cópia, tenho acesso apenas a transação do BD MySQL
TTransaction::open('bd_online');
e para o BD local preciso abrir outra transação.

Alguma luz nesse caso?

Obrigado!

Curso Dominando o Adianti Framework

O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado!


Dominando o Adianti Framework Quero me inscrever agora!

Comentários (7)


GS

Gostaria *
MC

Germano, boas

Forma Simples

1 - Abre a Transação do MySql e copia os dados,
2 - Abre a Transação do SQLite e salva os dados,
3 - Fecha as Transações;

Como você vai criar esta rotina ai depende de cada um, pode ser uma foreach (do primeiro para o segundo),
ou dentro dos modelos, ou vc pode criar classes para isso.

O salvar pode ser por registro ou por lote, o que vc achar melhor.

Ai você da asas a sua imaginação.



GS

Tentei fazer o método estático dentro do modelo, mas aparece uma mensagem "SQLSTATE[HY000]: General error: 5 database is locked".
O bloco está finalizado com um TTransaction::close();
Não sei o que acontece
MC

Germano, Boas

Posta o seu código para nos, assim teremos como ver onde esta o erro.

Abraços..
GS

Esse é o método que estou usando para inserir no BD local.

<?php    static function insertLocal($obj)    {        try        {            TTransaction::open('sqlite_local_database');                        $criteria = new TCriteria;            $criteria->add( new TFilter( 'inscricao_id', '=', $obj->id ));            if ( CandidatosLocal::countObjects($criteria) > 0 ) return; //Já baixado                        $c = new CandidatosLocal;                        $c->nome   = $obj->nome;            $c->rg         = $obj->rg;            $c->cpf       = $obj->cpf;            /*Demais campos aqui*/            $c->store();            TTransaction::close();                        return TRUE;        } catch (Exception $e) {            throw new Exception($e->getMessage());        }    }?>
GS

Descobri.

O primeiro RETURN não estava fechando a conexão.

Agradeço a atenção.
MC

Germano, Boas...

1 - Vc esta abrindo 2 vezes a mesma tabela na mesma transação, sem fechar a anterior.

2 - A melhor pratica e antes de você chamar a função InsertLocal fazer todas as certificações fora.
para isso temos aqui no forum uma contribuição que pode te ajudar.

https://www.adianti.com.br/forum/pt/view_1103?tuniquevalidator