Lançado Adianti Framework 7.6!
Clique aqui para saber mais
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

Pacotão Dominando o Adianti Framework 7
O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado! Versão 7.4


Dominando o Adianti 7 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.