TRATAMENTO DE ERRO

BRESSAN 03/08/2009 17:15:30
#318731
Pessoal Boa Tarte...
Preciso de uma ajudinha.
monte um processo na empresa em que trabalho, este processo consiste em validar informaçoes e faço conexão com três tipos de servidores MySQL, SyBase IQ, SyBase Ase.
Pode acontecer de algum servidor estar fora do ar, caso isso ocorra eu tenho q gravar no banco que não foi possivel consulta pq o servidor estava fora do ar...
Para isso estou usando no topo do Bloco On Error Resume Next e no rodape eu verifico se existe erro.
mais eu não sei qual o numero do erro de Impossivel conctar com o banco....alguem sabe????

Quem pode me ajudar...

Att,
Marcelo Bressan
TECLA 03/08/2009 17:18:33
#318732
Resposta escolhida
O correto é utilizar o bloco de tratamento ON ERROR GOTO <rotulo>.

Exemplo:

On Error GoTo erro
.
.
.
Exit Sub

erro:
MsgBox [Ô]Número do erro: [Ô] & err.Number
BRESSAN 03/08/2009 17:20:40
#318733
eu preciso gravar o erro de conxão ou servidor indisponivel no banco de dados...e esta forma ele somente gera uma mensagem...
entendeu?
TECLA 03/08/2009 17:23:21
#318734
Dá uma olhada na rotina completa.

On Error GoTo erro
.
.
.
Exit Sub

erro:
[ô]Gravar NUMERO e DESCRICAO do ERRO no banco
con.Execute [Ô]INSERT INTO logerro(num, desc) VALUES ([Ô] & Err.Number & [Ô], [ô][Ô] & Err.Description & [Ô][ô]);[Ô]


Se preferir, pode gravar o LOG em um arquivo de texto.
TECLA 03/08/2009 17:27:37
#318737
Além disso, é interessante utilizar o método Err.Source para armazenar o nome do OBJETO que retornou o erro para o BLOCO.
BRESSAN 03/08/2009 18:18:16
#318747
entaum tecla....o problema que o Goto Erro ele para ai o processo e o meu tem que continuar processando...imagina q é uma lista e varios processos...
entendeu:
ALVAROVB2009 03/08/2009 18:42:32
#318749
Após o tratamento de um
Resume Next
Assim ele vai continuar de onde deu o erro
TECLA 03/08/2009 21:10:12
#318762
Citação:

BRESSAN escreveu:
entaum tecla....o problema que o Goto Erro ele para ai o processo e o meu tem que continuar processando...imagina q é uma lista e varios processos...
entendeu:



Fiz um bloco de tratamento usando a instrução GOTO.

Option Explicit


Private Sub Command1_Click()
On Error GoTo erro
Dim i As Byte

[ô]<Processo 1>
i = 1
GoTo ProUm


[ô]<Processo 2>
i = 2
GoTo ProDois


[ô]<Processo 3>
i = 3
GoTo ProTres


Exit Sub

erro:

[ô]Gravar erro em banco de LOG
con.Execute [Ô]INSERT INTO log (num, desc) [Ô] & _
[Ô]VALUES ([Ô] & Err.Number & [Ô], [ô][Ô] & Err.Description & [Ô][ô]);[Ô]
Err.Clear

[ô]<Continuar a executar os outros processos de onde foi interrompido>
Select Case i
Case 1
GoTo ProDois
Case 2
GoTo ProTres
Case Else
Exit Sub
End Select
End Sub


Creio que resolva.
BRESSAN 04/08/2009 09:13:48
#318793
entendi...isso funciona....
Mais tecla como disse no inicio vc sabe qual o numero do erro quando não conseguimos efetuar uma conexão?
este é o mais importante.

Att,
Marcelo Bressan
WILLVIDAL 04/08/2009 10:11:35
#318813
Pra saber o código do erro vc pode tirar a rotina pra tratar o erro e fazer ele dar o erro, por exemplo, se o banco esta em outro computador é só vc tirar o cabo de rede e executar o sistema, a hora q ele tentar a brir o banco e não der certo vai aparecer a mensagem com o numero do erro e parar a execução, ai vc pega o numero q apareceu na mensagem e faz a rotina pra tratar ele certinho.
TECLA 04/08/2009 13:01:57
#318833
Citação:

BRESSAN escreveu:
entendi...isso funciona....
Mais tecla como disse no inicio vc sabe qual o numero do erro quando não conseguimos efetuar uma conexão?
este é o mais importante.

Att,
Marcelo Bressan



Porque saber o número, se a própria rotina irá ARMAZENAR o NÚMERO e a DESCRIÇÃO do erro no LOG?

Me refiro a este trecho da rotina:
[txt-color=#088A08][ô]Gravar erro em banco de LOG[/txt-color]
con.Execute [Ô]INSERT INTO log (num, desc) [Ô] & _
[Ô]VALUES ([Ô] & Err.Number & [Ô], [ô][Ô] & Err.Description & [Ô][ô]);[Ô]


Depois é só olhar o NÚMERO no arquivo.
Página 1 de 2 [13 registro(s)]
Tópico encerrado , respostas não são mais permitidas