TRATAMENTO DE ERROS
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]
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]
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.
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