Conheça as melhorias da versão 8.0, 8.1, 8.2!
Clique aqui para saber mais
Transações - Database Locked Pessoal. Preciso de mais uma ajuda. Tenho um formulário, onde preciso salvar os valores dele, e depois disto, realizar uma segunda transação para consumir os valores de um orçamento. Porém estou recebendo uma mensagem de DataBase Locked. Já tentei de várias maneiras e não estou conseguindo. ...
FW
Transações - Database Locked  
Fechado
Pessoal.
Preciso de mais uma ajuda.

Tenho um formulário, onde preciso salvar os valores dele, e depois disto, realizar uma segunda transação para consumir os valores de um orçamento.
Porém estou recebendo uma mensagem de DataBase Locked. Já tentei de várias maneiras e não estou conseguindo.

 
  1. <?php
  2. function onSave($param)
  3. {
  4. try
  5. {
  6. $orcamento = $this->onBuscaOrcamento($param['colaborador_id']);
  7. if($orcamento)
  8. {
  9. TTransaction::open('gestao_viagens');
  10. $conn = TTransaction::get();
  11. $result = $conn->query('PRAGMA foreign_keys = ON');
  12. $object = $this->form->getData('SolicitaViagem');
  13. $this->form->validate();
  14. $object->quem = TSession::getValue('id_user');
  15. $object->quando = date("Y-m-d H:i:s");
  16. $origem = $param['autoOrigem'];
  17. $destino = $param['autoDestino'];
  18. $object->origem_id = $this->onBuscaId($origem);
  19. $object->destino_id = $this->onBuscaId($destino);
  20. $object->store();
  21. 2557_via = $object->id_viagem;
  22. $this->form->setData($object);
  23. $consumir = $object->vlr_hotel + $object->vlr_transp + $object->vlr_adiantamento;
  24. $valor_orcamento = explode("-", $orcamento);
  25. TTransaction::close();
  26. sleep(5);
  27. $this->Consumir(2557_via, $valor_orcamento[0], $valor_orcamento[1], $consumir);
  28. new TMessage('info', TAdiantiCoreTranslator::translate('Record saved'));
  29. }
  30. else
  31. {
  32. new TMessage('error', 'Orçamento inexistente.<br>Favor Verificar o Centro de Custo!');
  33. }
  34. }
  35. catch (Exception $e)
  36. {
  37. new TMessage('error', '<b>Error:</b> ' . $e->getMessage());
  38. TTransaction::rollback();
  39. }
  40. }
  41. function Consumir(2557_via, 2557_orcamento, $vlr_orcamento, $consumir)
  42. {
  43. try
  44. {
  45. TTransaction::open('gestao_viagens');
  46. $consumo = new ConsumoOrcamento;
  47. $consumo->id_viagem = 2557_via;
  48. $consumo->id_orcamento = 2557_orcamento;
  49. $consumo->valor = $vlr_orcamento - $consumir;
  50. $consumo->store();
  51. TTransaction::close();
  52. }
  53. catch (Exception $e)
  54. {
  55. new TMessage('error', $e->getMessage());
  56. TTransaction::rollback();
  57. }
  58. }
  59. ?>


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 (3)


NR

Fernando, isso geralmente acontece quando uma transação não é fechada.
A função onBuscaOrcamento está fechando a conexão?

Em último caso faça um teste utilizando a mesma conexão para a onSave e Consumir.
FW

Nataniel,

Está fechado sim. Pensei nisto também.

Não estou no escritório hoje, mas vou tentar utilizar uma conexão apenas para todos os métodos.

Obrigado por hora, assim que consegui testar posto novamente.
FW

Nataniel,
Resolveu.

Removi as aberturas de conexão dos demais módulos e deixei apenas uma no OnSave.

Obrigado.