onSalvar Problemático Amigo...estou tendo problemas para salvar...esta gerano esse erro: SQLSTATE[55000]: Object not in prerequisite state: 7 ERROR: currval of sequence "produtos_cod_pro_seq" is not yet defined in this session.. estou usando o postgres, e essa tabela é a produtos, que por sua vez usa cod_pro(serial)...na criação do form tambem indiquei que esse campo tem o tipo de chave serial..... ver anex...
RS
onSalvar Problemático  
Amigo...estou tendo problemas para salvar...esta gerano esse erro:

SQLSTATE[55000]: Object not in prerequisite state: 7 ERROR: currval of sequence "produtos_cod_pro_seq" is not yet defined in this session..

estou usando o postgres, e essa tabela é a produtos, que por sua vez usa cod_pro(serial)...na criação do form tambem indiquei que esse campo tem o tipo de chave serial.....

ver anexo...


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


LA

Ola Rodrigo,

Como está o Model Produtos? Posta o código.

Existe o Sequence produtos_cod_pro_seq na estrutura do banco?
CREATE SEQUENCE produtos_cod_pro_seq INCREMENT 1 MINVALUE 1 MAXVALUE 9223372036854775807 START 1 CACHE 1;


No DEFAULT da chave primaria está assim?
DEFAULT nextval('produtos_cod_pro_seq'::regclass)

LA

agora que reparei esta usando o currval(), por que?
LA

Se precisa gravar o codigo da chave primaria no cod_pro, coloca isso no Model Produtos.

 
  1. <?php
  2. public function store() {
  3. parent::store();
  4. $this->cod_pro = $this->id_pro;
  5. parent::store();
  6. }
  7. ?>
RS

Entao...eu criei a tabela e a sequencia novamente e funcionou....obrigado...

uma outra coisa relacionada a onSave....nesse form de produtos tenho: codigo, descricao, unid, cod_cest..mas salvo e ele nao grava o cod_cest... será que é porque nao usei o TDBSeekButton corretamente? segue abaixo o codigo ProdutoManutencao.php com o onSave abaixo

 
  1. <?php
  2. class ProdutoManutencao extends TPage
  3. {
  4. private $form;
  5. function __construct()
  6. {
  7. parent::__construct();
  8. // create the form
  9. $this->form = new BootstrapFormBuilder('form_ProdutoManutencao');
  10. $this->form->setFormTitle(('Manutenção de Produtos'));
  11. $this->form->setFieldSizes('100%');
  12. $this->form->appendPage('Principal');
  13. $codProd = new TEntry('cod_pro');
  14. $codProd->setEditable(FALSE);
  15. $descricao = new TEntry('descricao');
  16. $unid = new TEntry('unid');
  17. $codCest = new ">TDBSeekButton('cod_cest', 'megadb', 'form_ProdutoManutencao', 'FiscalCest', 'descricao');
  18. $descricaoCest = new TEntry('descricao_cest');
  19. $descricaoCest->setEditable(FALSE);
  20. $codCest->setAuxiliar($descricaoCest);
  21. // add form fields
  22. $row = $this->form->addFields( [ new TLabel('Cód. Prod.'), $codProd ],
  23. [ new TLabel('Descrição'), $descricao ],
  24. [ new TLabel('Unid.'), $unid ]);
  25. $row->layout = ['col-sm-2', 'col-sm-8', 'col-sm-2'];
  26. $row = $this->form->addFields( [ new TLabel('Cest'), $codCest]);
  27. $row->layout = ['col-sm-12'];
  28. // tamanhos
  29. $codCest->setSize(105);
  30. $descricaoCest->setSize('calc(100% - 155px)');
  31. $descricaoCest->style .= ';margin-left:30px';
  32. // botao salvar
  33. $this->form->addAction('Savar', new TAction(array($this, 'onSave')), 'fa:save');
  34. // wrap the page content using vertical box
  35. $vbox = new TVBox;
  36. $vbox->style = 'width: 90%';
  37. $vbox->add($this->form);
  38. parent::add($vbox);
  39. }
  40. public function onSave($param)
  41. {
  42. try
  43. {
  44. TTransaction::open('megadb'); // abre a transação
  45. // obtém os dados do form na forma de um Active Record
  46. $object = $this->form->getData('Produto');
  47. $object->store(); // armazena o objeto
  48. $this->form->setData($object); // mantém o form preenchido
  49. TTransaction::close(); // fecha a transação
  50. new TMessage('info', 'Salvo com Sucesso!'); // mensagem de sucesso
  51. }
  52. catch (Exception $e) // em caso de exceção
  53. {
  54. new TMessage('error', '<b>Error</b> ' . $e->getMessage());
  55. TTransaction::rollback(); // desfaz operações
  56. }
  57. }
  58. public function onEdit( $param )
  59. {
  60. try
  61. {
  62. if (isset($param['key']))
  63. {
  64. $key = $param['key']; // get the parameter $key
  65. TTransaction::open('megadb'); // open a transaction
  66. $object = new Produto($key); // instantiates the Active Record
  67. $this->form->setData($object); // fill the form
  68. TTransaction::close(); // close the transaction
  69. }
  70. else
  71. {
  72. $this->form->clear(TRUE);
  73. }
  74. }
  75. catch (Exception $e) // in case of exception
  76. {
  77. new TMessage('error', $e->getMessage()); // shows the exception error message
  78. TTransaction::rollback(); // undo all pending operations
  79. }
  80. }
  81. }
LA

Quando não salva é porque não esta no Model.
Confere lá: appModelProdutos.class.php

Você não precisa criar a função onSave, já esta pronta no FW.
Só nos casos com datas, faço assim:

 
  1. <?php
  2. public function onValidacoes() {
  3. //...
  4. //$this->onSalve(); //Sem datas
  5. $this->onSalvar(); //Com datas
  6. }
  7. public function onSalvar() {
  8. $dados_form = $this->form->getData($this->activeRecord);
  9. try {
  10. //Salvar formato US
  11. TTransaction::open($this->database);
  12. $dados_form->data_reg = TDate::date2us($dados_form->data_reg);
  13. $this->form->validate();
  14. $dados_form->store(); //Salvar
  15. TTransaction::close();
  16. new TMessage('info', 'Registro salvo');
  17. //Carregar formato BR
  18. $dados_form->data_reg = TDate::date2br($dados_form->data_reg);
  19. $this->form->setData($dados_form);
  20. } catch (Exception $e) {
  21. new TMessage('error', $e->getMessage());
  22. TTransaction::rollback();
  23. }
  24. }
  25. ?>