Emidio, quando eu fiz um curso de Java, o instrutor falou que não devemos deixar que o banco acuse o erro, ou seja, deixar dar erro de integridade referencial, chave duplicada, essas coisas. Ele disse que para o banco isso é muito oneroso, gasta muito recurso, podendo deixar a aplicação lenta, lógico que levando em conta um sistema com muito acesso.
Ele falou que é melhor executarmos alguns selects pra tentar tratar o problema antes da inserção ou deleção. De acordo com ele, o uso de selects não onera tanto o banco de dados quanto uma interrupção. e ele ainda disse que, select count(*), pode usar a vontade. eu nunca consegui testar isso, mas vale a dica (eu acho :) ) espero ter ajudado em alguma coisa. 2009/2/13 Emidio Leite <[email protected]> > Olá a todos, será que alguém saberia informar como poderia fazer um > tratamento dos erros gerados pelo banco de dados no CI, por exemplo: > > Quando tentamos inserir um registro com uma chave duplicada, o banco de > dados (no meu caso MySQL) retorna um erro e o CI captura esse erro > retornando uma mensagem formatada. O mesmo ocorre quando usamos integridade > referencial, ao tentar remover um registro marcado como restrict em seu > relacionamento, o banco de dados retorna um erro e o CI captura o erro e > exibe a mensagem pra gente. > > Existe alguma forma de capturar tal erro gerado pelo banco de dados, com o > objetivo de manipula-lo, para posterior exibição da informação ao usuario? > ou seja, algo como: se ao tentar cadastrar um registro com a chave primária > já existente exibir ao usuario que a chave já está cadastrada. > > Na tentativa de solucionar o problema, fiz algo do tipo no meu MODEL: > > function excluir ($codigo){ > $this->db->where('codigo_mar', $codigo); > $this->db->delete('marca_equipamento'); > return $this->db->_error_number(); > } > > e desativei a mensagem padrão do CI, mudando $db['default']['db_debug'] > para FALSE: > > $db['default']['db_debug'] = FALSE; > > no meu controlador eu avalio o código do erro retornado: > > -se o erro retornado é 0(zero), tudo ocorreu bem. > -senão verifico o código do erro e exibo a mensagem para cada erro > específico. > > $retorno = $this->marca_equipamento_model->excluir($codigo); > if ( $retorno == '0'){ > echo "OK!"; > }else{ > echo "erro " . $retorno; > } > > Não sei se esse é o melhor método, gostaria da opinião do pessoal sobre a > melhor forma de tratar esse problema. > > Agradeço desde já > > > _______________________________________________ > Lista mailing list > [email protected] > http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br > > -- Paulo Balzi
_______________________________________________ Lista mailing list [email protected] http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br

