Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

pfm

Como posso tratar erros do banco de dados ?

Recommended Posts

Vamos ao seguinte caso:

 

tenho um campo CPF que obviamente não pode se repetir.

Na hora do cadastro a mesma pessoa tenta se recadastrar com o mesmo cpf

ao mandar gravar isso no DB é retornado um erro do tipo:

 

PgOleDb erro '80004005'

ERRO: duplicar valor da chave viola a restrição de unicidade

 

queria saber como verifico isso no asp para retornar uma mensagem amigavel ao usuario.

Compartilhar este post


Link para o post
Compartilhar em outros sites

No ASP clássico você vai precisar trabalhar com a diretiva de On Error Resume Next.

 

Seu código vai ficar parecido com isto:

 

<% 
Err.Clear
On Error Resume Next 
%>
...
<%
If Err.Number <> 0 Then
 Reponse.write "Ocorreu um erro"
End if
%>

 

Você pode fazer testes especificos para cada erro. O exemplo acima é meio que "genérico".

Compartilhar este post


Link para o post
Compartilhar em outros sites
Você pode fazer testes especificos para cada erro. O exemplo acima é meio que "genérico".

 

Era exatamente isso que ia te perguntar.. Existe uma lista com os tipos de erros retornados, para que eu possa fazer um select e de acordo com o erro gerar uma mensagem?

 

Outra coisa

<% 
Err.Clear
On Error Resume Next 
%>

estas linhas fazem exatamente o que?

anula o erro e pega o proximo (quer dizer eu vou saber o erro que deu ou o proximo caso haja mais de um?) :huh:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Alguns inconvenientes...

 

Cada objeto possui sua lista de erros, no seu caso que esta usando uma conexão OLE DB e este objeto possui sua própria referência de erros. Isto pode estar bem documentado, mas muitas vezes é pouco ou mal documentado.

 

O Err.Clear limpa qualquer erro que possa existir antes desta linha, normalmente usa-se o "On Error Resume Next" no inicio da página ASP, o que elimina a necessidade do Err.Clear, mas aí vem o outro problema. :)

Quando você usa o "On Error Resume Next" TODOS os erros, dali por diante, serão omitidos, o que pode ser considerado ruim. Sabendo disto, você deve tormar muito cuidado com o uso de "On Error Resume Next".

Procura-se então usar o "On Error Resume Next" imediatamente antes de onde pode vir a ocorrer um problema, para evitar que outros erros sejam omitidos e atrapalhe o funcionamento da aplicação.

 

Aqui uma referência rápida sobre o Err Object do VBScript.

http://www.devguru.com/technologies/vbscript/quickref/err.html

 

Alguns exemplos da Microsoft:

http://technet.microsoft.com/en-us/library/ee692852.aspx

 

Se não estou enganado, em JScript você tem blocos Try...Catch.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O On Error Resume Next é o único tratamento possível, porém se for usado de forma errada ele torna-se péssimo.

 

Veja o exemplo abaixo do uso do On Error Resume Next:

'<%
'On Error Resume Next


'Call SuaFuncao()

'If Err.Number <> 0 Then

'Call LogarErros()
'End If


'On Error Goto 0


'Sub SuaFuncao()
...
'End Sub


'Sub LogarErro()
'Response.Write "Ocorreu um erro inesperado (" & Err.number & " - " & err.Description & ")"
'Response.End
''SEU CÓDIGO PARA LOGAR EM BANCO DE DADOS, EVENT VIEWER, EMAIL, ETC...
'End Sub
'%> 

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.