Conheça  A Ferramenta LowCode mais moderna e veloz para desenvolvimento PHP: Adianti Creator
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.

 
  1. <?php
  2. static function insertLocal($obj)
  3. {
  4. try
  5. {
  6. TTransaction::open('sqlite_local_database');
  7. $criteria = new TCriteria;
  8. $criteria->add( new TFilter( 'inscricao_id', '=', $obj->id ));
  9. if ( CandidatosLocal::countObjects($criteria) > 0 ) return; //Já baixado
  10. $c = new CandidatosLocal;
  11. $c->nome = $obj->nome;
  12. $c->rg = $obj->rg;
  13. $c->cpf = $obj->cpf;
  14. /*Demais campos aqui*/
  15. $c->store();
  16. TTransaction::close();
  17. return TRUE;
  18. } catch (Exception $e) {
  19. throw new Exception($e->getMessage());
  20. }
  21. }
  22. ?>
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