Realmente esperar que o erro ocorra pode ser bastante oneroso, talvez uns
selects para verificar a integridade possa ser uma boa solução, no entando,
será que o codeigniter possui alguma forma para capturar tal erro gerado
pelo banco de dados? como ele trata tal exceção?

2009/2/13 Ricardo Valfreixo <[email protected]>

> Esse é um estilo de programação. Por exemplo num insert, faz-se apenas com
> o id, ou seja, insere-se uma linha em branco. Depois faz-se um update com os
> dados ao insert_id. É útil para um sistema de alto débito com muitos
> inserts. Reduz-se ao mínimo o tempo de insert. Depois temos todo o tempo do
> mundo para fazer o update pois o id já está reservado.
>
> // Zen
>
>
>
> 2009/2/13 Paulo Balzi <[email protected]>
>
> 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
>>
>>
>
> _______________________________________________
> Lista mailing list
> [email protected]
> http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br
>
>
_______________________________________________
Lista mailing list
[email protected]
http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br

Responder a