Lançado Adianti Framework 7.6!
Clique aqui para saber mais
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 completo Meu Negócio Pronto
Use para si, ou transforme em um negócio: Inclui aulas e códigos-fontes
Gestor de conteúdo (SITE) + Loja Virtual (E-Commerce) + Emissor de Notas para infoprodutos


Meu negócio pronto 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.             
  8.             $criteria = new TCriteria;
  9.             $criteria->add( new TFilter'inscricao_id''='$obj->id ));
  10.             if ( CandidatosLocal::countObjects($criteria) > ) return; //Já baixado
  11.             
  12.             $c = new CandidatosLocal;            
  13.             $c->nome   $obj->nome;
  14.             $c->rg         $obj->rg;
  15.             $c->cpf       $obj->cpf;
  16.             /*Demais campos aqui*/
  17.             $c->store();
  18.             TTransaction::close();
  19.             
  20.             return TRUE;
  21.         } catch (Exception $e) {
  22.             throw new Exception($e->getMessage());
  23.         }
  24.     }
  25. ?>
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