Informações não são persistidas no banco Ola, Fiz algumas alterações da classe de grupo para obter dados de outro banco, porém quando vou salvar as alterações ( deletar / inativar, no meu caso), os dados não são persistidos, e depois de muito tempo aparece a seguinte mensagem: SQLSTATE[HY000]: General error: 5 database is locked segue trecho com alterações model system_group ...
RB
Informações não são persistidas no banco  
Ola,

Fiz algumas alterações da classe de grupo para obter dados de outro banco, porém quando vou salvar as alterações ( deletar / inativar, no meu caso), os dados não são persistidos, e depois de muito tempo aparece a seguinte mensagem:

SQLSTATE[HY000]: General error: 5 database is locked

segue trecho com alterações model system_group

  1. <?php
  2. .......
  3. private $organizacao;
  4. //banco permission
  5. public function __construct($id NULL)
  6.     {
  7.         parent::__construct($id);
  8.         parent::addAttribute('name');
  9.         parent::addAttribute('organizacao_id');
  10.         parent::addAttribute('ativo');
  11.     }
  12.  //metodo novo
  13. public function get_organizacao()
  14.     {
  15.         try {
  16.             TTransaction::open('outro_banco');
  17.             // loads the associated object
  18.         if (empty($this->organizacao))
  19.             $this->organizacao = new Organizacao($this->organizacao_id);
  20.     
  21.             // returns the associated object
  22.             return $this->organizacao;
  23.             TTransaction::close();
  24.         } catch (Exception $e) {
  25.             new TMessage('error',$e->getMessage());
  26.             TTransaction::rollback();
  27.         }
  28.     }
  29. ?>


Sgue imagem abaixo

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


MC

Essa mensagem é caracteristica do SQLite, vc deve ter aberto um foreach ou um for, e não fechou. ex:
  1. <?php
  2.      TTransaction::open('permission');   
  3.      $conn TTransaction::get(); // get PDO connection   
  4.      $result $conn->query("SELECT id, nome  from tabela where campo = {$key}");               
  5.       foreach ($result as $row)
  6.          {                  
  7.             echo 'o codigo é:  '.$row['id'];
  8.          }  
  9.      TTransaction::close();     //não esqueça de fechar
  10. ?>


Reinicie o pc que vc vai conseguir acessar a base de dados, e depois feche o laço de repetição com TTransaction::close(); Boa Sorte
RB

Miuller,

verifiquei todos os foreach e estão todos fechados, ainda não consegui identificar onde esta o erro.

fonte completo

  1. <?php
  2. class GrupoEmpresa extends TPage
  3. {
  4.     private $datagrid;
  5.     private $loaded;
  6.     private $form;
  7.     
  8.     public function __construct()
  9.     {
  10.         parent::__construct();
  11.         parent::include_css('app/resources/blue_modificado.css');
  12.         parent::include_css('app/resources/custom-table.css');
  13.         new TSession;
  14.         //cria formulário para envelopar datagrid
  15.         $this->form = new TForm('form_search_empresa');
  16.         $this->form->style='border: 1px solid #f4f4f4';
  17.         //cria os botões de ação
  18.         $button = new TButton('action1');
  19.         //$action1 = new TAction(['Classe','funcao'], ['param1'=>'123','param2'=>'234']);
  20.         $button->setAction(new TAction(array($this,'onInputDialog')),'Novo');
  21.         $button->setImage('ico_edit.png');
  22.         
  23.         // creates one datagrid
  24.         $this->datagrid = new TDataGrid;
  25.         //$this->datagrid = new BootstrapDatagridWrapper(new TDataGrid);
  26.         //$this->datagrid->datatable = 'true';
  27.         $this->datagrid->style 'width: 100%;border:1px solid #ccc;';
  28.         
  29.         // create the datagrid columns
  30.         $code       = new TDataGridColumn('id','#','center','5%');
  31.         $name       = new TDataGridColumn('name''Grupo''left');
  32.         $empresa    = new TDataGridColumn('organizacao->pessoa->nome''Empresa''left');
  33.         $editar     = new TDataGridColumn('editar','','center','5%');
  34.         $deletar    = new TDataGridColumn('deletar','','center','5%');
  35.         $addUser    = new TDataGridColumn('addUser','','center','5%');
  36.         $editar->colspan 2;
  37.         $editar->style "border-style:solid;border-right-color: #1E5799; border-left-color: #1E5799; border-collapse:collapse";
  38.         $deletar->style "border-style:solid;border-left-color: #1E5799;border-collapse:collapse;";
  39.         $addUser->style "border-style:solid;border-right-color: #069;border-collapse:collapse;display:none;";
  40.         
  41.         // add the columns to the datagrid
  42.         $this->datagrid->addColumn($code);
  43.         $this->datagrid->addColumn($name);
  44.         $this->datagrid->addColumn($empresa);
  45.         $this->datagrid->addColumn($editar);
  46.         $this->datagrid->addColumn($deletar);
  47.         $this->datagrid->addColumn($addUser);  
  48.         // creates the datagrid model
  49.         $this->datagrid->createModel();
  50.         
  51.         // wrap the page content using vertical box
  52.         $vbox = new TVBox;
  53.         $vbox->add(new TXMLBreadCrumb('menu.xml'__CLASS__));
  54.         $this->form->setFields(array($button));
  55.         $vbox->add($button);
  56.         $vbox->add($this->datagrid);
  57.         parent::add($vbox);
  58.     }
  59.  
  60.     function onReload($param NULL){        
  61.         try{
  62.              $organizacion_id TSession::getValue('organizacion_id');//pega id da empresa na seção do usuário
  63.              //abre a transação com a base
  64.              TTransaction::open('permission');
  65.              //cria um repositório para carregar 'Pessoa Fisica'
  66.              $grupos  = new TRepository('SystemGroup');
  67.              $limit 10;
  68.              // default order
  69.             if (empty($param['order'])){
  70.                 $param['order'] = 'id';
  71.             }
  72.             //cria um critério para seleção de dados
  73.             $criteria = new TCriteria;
  74.              
  75.             $criteria->setProperties($param); // order, offset
  76.             $criteria->add(new TFilter('organizacao_id''='$organizacion_id));
  77.             $criteria->add(new TFilter('ativo''='1));
  78.             $criteria->setProperty('limit',$limit);
  79.             $objects $grupos->load($criteria);
  80.             $this->datagrid->clear();
  81.             if($objects)
  82.             {
  83.                 foreach($objects as $object)
  84.                 {                           
  85.                     //cria os botões de ação e adiciona a datagrid
  86.                     $edit   = new TImage('fa:edit blue');
  87.                     $action = new TAction(array($this'onView'));
  88.                     $action->setParameter('key',$object->id);
  89.                     $object->editar $edit;
  90.                     $a = new TActionLink($edit$action);
  91.                     $del     = new TImage('fa:trash red');
  92.                     $action1 = new TAction(array($this'onDelete'));
  93.                     $action1->setParameter('key',$object->id);
  94.                     $object->deletar $del;
  95.                     $b = new TActionLink($del$action1);
  96.                     //$action1 = new TAction(['Classe','funcao'], ['param1'=>'123','param2'=>'234']);
  97.                     $add     = new TImage('fa:plus blue');
  98.                     $action3 = new TAction(array($this'onView'));
  99.                     $action3->setParameter('key',$object->id);
  100.                     $object->addUser $add;
  101.                     $user = new TActionLink($add$action3);
  102.                     $object->editar  $a;
  103.                     $object->deletar $b;
  104.                     $object->addUser $user;
  105.                     $this->datagrid->addItem($object);
  106.                 }
  107.             }
  108.             //reset the criteria for record count
  109.             $criteria->resetProperties();
  110.             //$count = grupos::countObjects($criteria);
  111.             //$this->pageNavigation->setCount($count); // count of records
  112.             //$this->pageNavigation->setProperties($param); // order, page
  113.             //$this->pageNavigation->setLimit($limit); // limit
  114.              TTransaction::close();
  115.              $this->loaded TRUE;
  116.            }
  117.            catch (Exception $e)
  118.            {
  119.                 new TMessage('error',$e->getMessage());
  120.                 TTransaction::rollback();
  121.            }
  122.     }
  123.     function onDelete($param)
  124.     {
  125.         // define the next action
  126.         $action3 = new TAction(array($this'onInative'));
  127.         $action3->setParameters($param); // pass 'key' parameter ahead
  128.         // shows a dialog to the user
  129.         new TQuestion(TAdiantiCoreTranslator::translate('Do you really want to delete ?'),$action3);
  130.     }
  131.     function onInative($param)
  132.     {
  133.         $organizacao_id TSession::getValue('organizacion_id');
  134.         $atualizacao date('Y-m-d H:m:s');
  135.         try
  136.         {
  137.             TTransaction::open('permission');
  138.            /*
  139.             TTransaction::setLoggerFunction(function($param)
  140.             {
  141.                 print_r($param).'<br/>';
  142.             });
  143.             */
  144.             $key $param['key'];           
  145.             $objects  SystemGroup::where('id','=',$key)->load();
  146.             foreach ($objects as $object
  147.             {
  148.                 $object->ativo 0;
  149.                 $object->store(); 
  150.             }
  151.             TTransaction::close();
  152.             
  153.             new TMessage('info',TAdiantiCoreTranslator::translate('Records deleted'), new TAction(array($this'onReload'))); 
  154.         }
  155.         catch (Exception $e)
  156.         {
  157.             new TMessage('error',$e->getMessage());
  158.             TTransaction::rollback();
  159.         }
  160.     }
  161.    
  162.     function onView($param)
  163.     {
  164.         // get the parameter and shows the message
  165.         $name $param['key'];
  166.         new TMessage('info'"The name is : $name");
  167.     }
  168.      /**
  169.      * Open an input dialog
  170.      */
  171.     public function onInputDialog()
  172.     {
  173.         $nome_grupo   = new TEntry('nome_grupo');
  174.         $form = new TQuickForm('input_form');
  175.         //$form = new TForm('input_form');
  176.         $form->style 'padding:5px 5px 20px 20px';
  177.         
  178.         $table = new TTable;
  179.         $table->addRowSet$lbl = new TLabel('Nome'));
  180.         $table->addRowSet$nome_grupo );
  181.         $lbl->setFontColor('#112a47');        
  182.         
  183.         $form->setFields(array($nome_grupo));
  184.         $form->add($table);
  185.         
  186.         $action = new TAction(array('GrupoEmpresa''onSave'));
  187.         $form->addQuickAction(TAdiantiCoreTranslator::translate('Save'),$action 'ico_save.png');
  188.         // show the input dialog
  189.         //$action = new TAction(array('GrupoEmpresa', 'onSave'));
  190.         $action->setParameter('stay-open'1);
  191.         new TInputDialog('Novo Grupo'$form$action'Pesquisar');
  192.     }
  193.     
  194.     /**
  195.      * Show the input dialog data
  196.      */
  197.     public static function onSave$param )
  198.     {
  199.         try {
  200.             $get_session TSession::getValue('organizacion_id');//pega id da empresa na seção do usuário
  201.             TTransaction::open('permission');
  202.             TTransaction::setLoggerFunction(function($param)
  203.             {
  204.                 print $param.'<br/>';
  205.             });
  206.             
  207.             if(isset($param['nome_grupo']) AND (!empty($param['nome_grupo'])))
  208.             {
  209.                 $object = new SystemGroup;
  210.                 $object->name $param['nome_grupo'];
  211.                 $object->organizacao_id $get_session;
  212.                 $object->ativo 1;
  213.                 $object->store();
  214.                 if ($object
  215.                 {
  216.                     new TMessage('info',TAdiantiCoreTranslator::translate('Record saved'), new TAction(array('GrupoEmpresa''onReload')));
  217.                 }
  218.             }
  219.             else
  220.             {
  221.                 new TMessage('info','Nome é obrigatório',new TAction(array('GrupoEmpresa''onInputDialog')));
  222.             }
  223.             TTransaction::close();
  224.             
  225.         } catch (Exception $e) {
  226.             new TMessage('error',$e->getMessage());
  227.                 TTransaction::rollback();
  228.         }
  229.     }
  230.     
  231.     /**
  232.      * shows the page
  233.      */
  234.     function show()
  235.     {
  236.         // check if the datagrid is already loaded
  237.         if (!$this->loaded){
  238.             $this->onReloadfunc_get_arg(0) );
  239.         }
  240.         parent::show();
  241.     }
  242. }
  243. ?>
LG

Tente fechar a transação antes de exibir a mensagem...
  1. <?php
  2.  TTransaction::close();
  3.  if ($object
  4.                 {
  5.                     new TMessage('info',TAdiantiCoreTranslator::translate('Record saved'), new TAction(array('GrupoEmpresa''onReload')));
  6.                 }
  7.             }
  8.             else
  9.             {
  10.                 new TMessage('info','Nome é obrigatório',new TAction(array('GrupoEmpresa''onInputDialog')));
  11.             }
  12. ?>
RB

Leandro, bom dia.

Ao criar um novo grupo esta salvando perfeito, a questão é no método onDelete / onInative, que os dados não são persistidos.
LG

porque você não simplifica o metodo inative deixando assim:

  1. <?php
  2.   function onInative($param)
  3.     {
  4.         try
  5.         {
  6.             TTransaction::open('permission');
  7.             $key $param['key'];           
  8.             $object  = new SystemGroup($key);
  9.             $object->ativo 0;
  10.             $object->store(); 
  11.             TTransaction::close();            
  12.             new TMessage('info',TAdiantiCoreTranslator::translate('Records deleted'), new TAction(array($this'onReload'))); 
  13.         }
  14.         catch (Exception $e)
  15.         {
  16.             new TMessage('error',$e->getMessage());
  17.             TTransaction::rollback();
  18.         }
  19.     }
  20. ?>
RB

Leandro,

Na realidade, eu já tentei desta forma também, a questão é que os dados não são persistidos, já fiz e refiz o método, porém sem sucesso.

Mas valeu pela atenção, vou continuar tentando aqui.
MC

Já que as informações não estão sendo persistidas, vc deve checar o código, tente adicionar essas linhas e veja como ficou

TTransaction::open('permission');
$key = $param['key']; //parâmetro
echo 'a váriavel key é: '.$key.'
';

$data = $this->form->getData();
$object->fromArray( ( array )$data);

$object = new SystemGroup($key); Abre os registros no model SystemGroup cuja chave é $key
$object->ativo = 0;
var_dump( $object )//cheque o que está chegado
//$object->store();


se não tiver dados no var_dump, tente substituir $key por uma session
RB

Miuller,

Consegui resolver, passei a utilizar o parâmetro unit_id.

Valeu pela atenção.

Obrigado.