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. // returns the associated object
  21. return $this->organizacao;
  22. TTransaction::close();
  23. } catch (Exception $e) {
  24. new TMessage('error',$e->getMessage());
  25. TTransaction::rollback();
  26. }
  27. }
  28. ?>


Sgue imagem abaixo

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