TRATAMENTO DE ERRO NA CLASSE

 Tópico anterior Próximo tópico Novo tópico

TRATAMENTO DE ERRO NA CLASSE

VB / VBA

 Compartilhe  Compartilhe  Compartilhe
#490089 - 20/08/2019 11:47:00

ROSANGELASILVA1
SOROCABA
Cadast. em:Agosto/2019


Bom dia,

Estou com um problema quando ocorre um erro em uma função que fiz em uma classe no VB6. Este erro deve voltar  para o  formulário que o chamou. Exemplo:

'A Função abaixo está declarada em uma classe: clsPedido.cls

Public Function rsLocalizarPedido(ByVal aCodigo As Integer) As ADODB.Recordset
    Dim strSql As String
    
On Error GoTo TrataErro
    
    strSql = "Select * from Pedidos Where Codigo =  " & aCodigo
    Set rsAux = Nothing
    Set rsAux = New ADODB.Recordset
    rsAux.Open strSql, cnnConnection, adOpenKeyset, adLockReadOnly
    
    Set rsLocalizarPedido = rsAux
    
    Exit Function
TrataErro:
       Err.Raise Err.Number, Err.Source, Err.Description

End Function

'  a Sub abaixo está declarada no formulário: frmPedido.frm
Private Sub txtCodigo_LostFocus()
    
On Error GoTo TrataErro
    Set rsLocalizarPedido = Nothing
    Set rsLocalizarPedido = clsPedido.rsLocalizarPedido(txtCodigo.Text)
    LimparCamposPedido
    'Se Pedido existe
    If Not rsLocalizarPedido.EOF Then
        dtpData = rsLocalizarPedido!Data
        cboSituacao.ListIndex = rsLocalizarPedido!Situacao - 1
        txtSolicitante.Text = rsLocalizarPedido!Solicitante
        Call AtualizarValorTotalPedido
        Call PreencherGridItemPedidos
    Else
       Call NovoPedido
    End If
    Set rsLocalizarPedido = Nothing
    
     Exit Sub
    
TrataErro:
    Set rsLocalizarPedido = Nothing
    MsgBox Err.Number & " -" & Err.Description, vbCritical, "txtCodigo_LostFocus"
    
End Sub

Quando ocorre um erro na classe clspedido, este erro não tem reflexo no form que chamou, ou seja, não aparece um Msgbox do erro que ocorreu na classe. Usei o Err. raise na classe mas não funcionou.  Por favor, alguém pode me ajudar?

Obrigada.








#490384 - 10/09/2019 18:11:25

EPISCOPAL
VARZEA GRANDE
Cadast. em:Maio/2009


Última edição em 10/09/2019 18:24:01 por EPISCOPAL

Isso nunca vai acontecer porque são objetos diferentes. Você pode fazer um evento.

clsPedido.cls

Public Event ErrClass(ByVal Number as Long, ByVal Source as String, ByVal Description as String)

Public Function rsLocalizarPedido(ByVal aCodigo As Integer) As ADODB.Recordset
    Dim strSql As String
    
On Error GoTo TrataErro
    
    strSql = "Select * from Pedidos Where Codigo =  " & aCodigo
    Set rsAux = Nothing
    Set rsAux = New ADODB.Recordset
    rsAux.Open strSql, cnnConnection, adOpenKeyset, adLockReadOnly
    
    Set rsLocalizarPedido = rsAux
    
    Exit Function
TrataErro:
       RaiseEvent ErrClass( Err.Number, Err.Source, Err.Description)

End Function


____________________________________________________________________
Episcopal Studios




#490385 - 10/09/2019 18:19:32

EPISCOPAL
VARZEA GRANDE
Cadast. em:Maio/2009


Última edição em 10/09/2019 18:22:26 por EPISCOPAL

No seu formulario
Private CPedido as clsPedido
Private WithEvents cPedido as clsPedido

Private sub cPedido_ErrClass(ByVal Number as Long, ByVal Source as String, ByVal Description as String)
Aqui vc trata o erro ...
Err.Raise Number, Source, Description


End sub


____________________________________________________________________
Episcopal Studios




 Tópico anterior Próximo tópico Novo tópico


Para responder este tópico o login é requerido
Se você já possui uma conta de usuário por favor faça seu login
Se você não possui uma conta de usuário use a opção Criar usuário