TRATAMENTO DE ERROS

USUARIO.EXCLUIDOS 17/06/2004 16:57:36
#30092
E ai pessoal estou desenvolvendo meu primeiro projeto com utilização de banco de dados (access 97), tenho algumas duvidas quanto ao tratamento de erros.

No modulo principal o meu tratamento " TrataErro " está no local correto?
Posso utiliza-lo para outras funçoes dentro do modulo ou é necessario cria-la novamente?[S23]
No formularia a linha " On Error GoTo TrataErro " esta no lugar correto?[S45]
Posso utilizar o " TrataErro " do modulo para os formularios ou tenho que cria-la em cada formulario? Se for necessário criar um para cada form qual o local correto, no inicio do form, dentro da funçao, onde?[S22]

' Modulo Principal

Option Explicit

Public WrkSpaceBD As Workspace
Public Banco As Database
Public vTb As Recordset

Public Sub AbrirBancoDeDados()
On Error GoTo TrataErro
Set WrkSpaceBD = DBEngine.Workspaces(0)
Set Banco = OpenDatabase("T:\db.mdb")
Set vTb = Banco.OpenRecordset("tabela", dbOpenTable)
Exit Sub

TrataErro:
Select Case Err.Number
Case 1
MsgBox "Erro 1"
Case 2
MsgBox "Erro 2"
Case Else
MsgBox "Outro erro"
Resume Next
End Select

End Sub

'Formulário

Option Explicit

Dim vSigla As String
Dim vNome As String

Private Sub CmdIncluir_Click()
On Error GoTo TrataErro
vSigla = TxtSigla.Text
vNome = CboNome.Text
If vSigla <> "" Then
If vNome <> "" Then
vTb.AddNew
vTb.Fields("sigla") = vSigla
vTb.Fields("nome") = vNome
vTb.Update
TxtSigla.Text = ""
CboNome.Text = ""
vSigla = ""
vNome = ""
TxtSigla.SetFocus
Else
MsgBox "Digite o nome"
CboNome.SetFocus
End If
Else
MsgBox "Digite a sigla"
TxtSigla.SetFocus
End If
End Sub[S25]


Só isso...rs[S41]
USUARIO.EXCLUIDOS 18/06/2004 16:16:21
#30289
Resposta escolhida
Bem vc teria que criar para cada modulo, mas para facilitar vc pode criar a rotina que trata o erro e dentro de cada rotina no tratamento do erro chama a rotina que trata o erro.
ex
private sub trataerro(byval num as integer)
Select Case num
Case 1
MsgBox "Erro 1"
Case 2
MsgBox "Erro 2"
Case Else
MsgBox "Outro erro"
Resume Next
End Select
end sub

nas demais rotinas

private sub1()
On Error GoTo T_ERRO
.
.
.
exit sub
T_ERRO:
trataerro Err.number
end sub

private sub2()
On Error GoTo T_ERRO
.
.
.
exit sub
T_ERRO:
trataerro Err.number
end sub

Seria legal também passar outro parametro como o nome da função e exibir no msgbox assim vc sabe de qual rotina originou o erro.


Tópico encerrado , respostas não são mais permitidas