MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração


Participe do fórum, é rápido e fácil

MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração

MaximoAccess

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access


3 participantes

    [Resolvido]Tratar excecao (Erro)

    avatar
    Leticia.*-*
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Feminino
    Localização : Brasil
    Mensagens : 63
    Registrado : 02/12/2012

    [Resolvido]Tratar excecao (Erro) Empty Tratar excecao (Erro)

    Mensagem  Leticia.*-* 16/12/2012, 14:14

    Bom dia !
    Estou tentando tratar um erro no evento de um botao cadastrar... neste botao eu tenho que inserir dados em 3 tabelas diferente... tudo esta funcionando mas o tratamento de erro nao ta ok... ele esta executando o erro mesmo nao havendo erro.
    No meu caso preciso que se caso houver um erro na insercao em uma das 3 tabelas ele nao insere em nenhuma e mostre a msg de erro.



    ' No modulo conexao
    Public StrSql As String
    Public Banco As Database
    Public dataset As Recordset
    Function Conecta()
    Set Banco = CurrentDb
    End Function
    Function Valida_Selecao()
    Set dataset = Banco.OpenRecordset(StrSql, dbOpenDynaset)
    End Function

    ' No evento do Botao caadastrar
    Private Sub CmdCadCliente_Click()
    ' tratatamento de erro
    On Error GoTo Trata_Erro

    Gerar_Codigo_CadCliente ' Metodo para gerar codigo
    Comando = "insert into Tbl_Cliente(...) values(...)"
    Banco.Execute (StrSQL)'
    StrSQL = Empty

    Gerar_Codigo_Dados_Banco
    Comando = "insert into Tbl_Dados_Banco(...) values(...)"
    Banco.Execute (StrSQL)
    StrSQL = Empty

    Gerar_Codigo_Premio
    Comando = "insert into Tbl_Premio(...)values(...)"
    Banco.Execute (StrSQL)
    StrSQL = Empty

    MsgBox ("Os Dados foram cadastrados com Sucesso !"), vbInformation + vbOKOnly, "Cadastro de Cliente"
    Limpar_Campos

    Trata_Erro:
    MsgBox ("Não foi possivel cadastrar !"), vbCritical + vbOKOnly, "Cadastro de cliente"

    End Sub

    avatar
    Convidado
    Convidado


    [Resolvido]Tratar excecao (Erro) Empty Re: [Resolvido]Tratar excecao (Erro)

    Mensagem  Convidado 16/12/2012, 14:19

    Após a última linha do Código coloque:
    .. Lembre de declarar a variável no início: Dim Msg as String

    MsgBox ("Os Dados foram cadastrados com Sucesso !"), vbInformation + vbOKOnly, "Cadastro de Cliente"
    Limpar_Campos

    Exit Sub

    Exit_TrataErro:
    DoCmd.Hourglass False
    DoCmd.Echo True
    Exit Sub

    trataerro:
    If err.Number = 0 Then
    Resume Next
    Else
    DoCmd.Hourglass False
    DoCmd.Echo True
    MSg = "Erro # " & Str(err.Number) & " gerado na " & err.Source _
    & vbNewLine & vbNewLine & "Descrição: " & err.Description _
    & vbNewLine & vbNewLine & "Por favor contate o Administrador de Sistema."
    MsgBox MSg, vbMsgBoxHelpButton + vbCritical, "Erro", err.Helpfile, err.HelpContext
    Resume Exit_TrataErro
    End If
    End Sub

    Cumprimentos.
    avatar
    Leticia.*-*
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Feminino
    Localização : Brasil
    Mensagens : 63
    Registrado : 02/12/2012

    [Resolvido]Tratar excecao (Erro) Empty Re: [Resolvido]Tratar excecao (Erro)

    Mensagem  Leticia.*-* 16/12/2012, 18:24

    Ola Piloto!
    Funcionou bancana ... mas o problemas é que pra mim ver o tratamento de erro funcioando beleza eu simulei um erro na segunda insercao ... a Mensagem de erro apareceu como esperado... mas fui nas tabelas e a primeira insercao ocorreu normal ja que o o erro era na segunda insercao... e preciso que caso aconteca alguma erro em qualquer uma das insercao o codigo vai para o TrataErro mas nao inserir nada.

    Obg pel atencao !
    Avelino Sampaio
    Avelino Sampaio
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3900
    Registrado : 04/04/2010

    [Resolvido]Tratar excecao (Erro) Empty Re: [Resolvido]Tratar excecao (Erro)

    Mensagem  Avelino Sampaio 16/12/2012, 18:30

    Olá,

    veja no help do VBA sobre: BeginTrans, CommitTrans e Rollback

    Sucesso!


    .................................................................................
    Vídeos, livros, kit MontaRibbons e acesso vitalício ao site UsandoAcces  
    Clique AQUI e analise o custo beneficio do material oferecido.
    avatar
    Convidado
    Convidado


    [Resolvido]Tratar excecao (Erro) Empty Re: [Resolvido]Tratar excecao (Erro)

    Mensagem  Convidado 16/12/2012, 23:38

    Podes no tratamento de erro, aplicar a solução indicada pelo Mestre Avelino.

    Obrigado pela Participação Grande Avelino.

    Abraços.
    avatar
    Leticia.*-*
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Feminino
    Localização : Brasil
    Mensagens : 63
    Registrado : 02/12/2012

    [Resolvido]Tratar excecao (Erro) Empty Re: [Resolvido]Tratar excecao (Erro)

    Mensagem  Leticia.*-* 22/1/2013, 23:22

    Como fica a sintaxe desses comando BeginTrans, CommitTrans e Rollback
    Nao encontrei no Help (F1)

    Obg!

    Cláudio Más
    Cláudio Más
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1314
    Registrado : 21/01/2012

    [Resolvido]Tratar excecao (Erro) Empty Re: [Resolvido]Tratar excecao (Erro)

    Mensagem  Cláudio Más 23/1/2013, 03:12

    Exemplo
    Avelino Sampaio
    Avelino Sampaio
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3900
    Registrado : 04/04/2010

    [Resolvido]Tratar excecao (Erro) Empty Re: [Resolvido]Tratar excecao (Erro)

    Mensagem  Avelino Sampaio 23/1/2013, 08:13

    Leticia, o Access possui dois Help's: O Help do Access e o Help do VBA.

    Para entrar no help do VBA , vc primeiro deve abrir o VBA para então aciona-lo pelo botão do menu.

    Quando tiver um tempinho assista este minha super vídeo-aula de "Como estudar com o Pesquisador de Objetos"

    http://www.usandoaccess.com.br/tutoriais/tuto2.asp?id=1#inicio

    Sucesso!


    .................................................................................
    Vídeos, livros, kit MontaRibbons e acesso vitalício ao site UsandoAcces  
    Clique AQUI e analise o custo beneficio do material oferecido.
    avatar
    Leticia.*-*
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Feminino
    Localização : Brasil
    Mensagens : 63
    Registrado : 02/12/2012

    [Resolvido]Tratar excecao (Erro) Empty Re: [Resolvido]Tratar excecao (Erro)

    Mensagem  Leticia.*-* 16/2/2013, 16:47

    Boa Tarde!!!

    Pelo que pesquisei
    BeginTrans, CommitTrans e Rollback funciona com ADO somente.

    Alguma solucao para DAO ?

    Embarassed
    avatar
    Convidado
    Convidado


    [Resolvido]Tratar excecao (Erro) Empty Re: [Resolvido]Tratar excecao (Erro)

    Mensagem  Convidado 16/2/2013, 17:13

    Boa tarde, se possivel disponibilize um pequeno exemplo para que possamos ver isto pra ti.

    Cumprimentos.
    Avelino Sampaio
    Avelino Sampaio
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3900
    Registrado : 04/04/2010

    [Resolvido]Tratar excecao (Erro) Empty Re: [Resolvido]Tratar excecao (Erro)

    Mensagem  Avelino Sampaio 16/2/2013, 17:15

    Pesquisou aonde ?????

    Veja uma parte do HELP do VBA sobre o assunto:

    O mecanismo de banco de dados do Microsoft Access oferece suporte às transações por meio dos métodos BeginTrans, CommitTrans e Rollback do objeto Workspace do DAO.

    O exemplo a seguir altera o cargo de todos os representantes de venda da tabela Employees. Depois de o método BeginTrans iniciar uma transação que isola todas as alterações feitas na tabela Employees, o método CommitTrans salva as alterações. Lembre-se de que você pode usar o método Rollback para desfazer as alterações salvas com o método Update.


    Código:
    Sub ChangeTitle()

    Dim wrkCurrent As DAO.Workspace
    Dim dbsNorthwind As DAO.Database
    Dim rstEmployee As DAO.Recordset

    On Error GoTo ErrorHandler

      Set wrkCurrent = DBEngine.Workspaces(0)
      Set dbsNorthwind = CurrentDB
      Set rstEmployee = dbsNorthwind.OpenRecordset("Employees")

      wrkCurrent.BeginTrans
      Do Until rstEmployee.EOF
          If rstEmployee!Title = "Sales Representative" Then
            rstEmployee.Edit
            rstEmloyee!Title = "Sales Associate"
            rstEmployee.Update
          End If
          rstEmployee.MoveNext
      Loop

      If MsgBox("Save all changes?", vbQuestion + vbYesNo) = vbYes Then
          wrkCurrent.CommitTrans
      Else
          wrkCurrent.Rollback
      End If

      rstEmployee.Close
      dbsNorthwind.Close
      wrkCurrent.Close

      Set rstEmployee = nothing
      Set dbsNorthwind = Nothing
      Set wrkCurrent = Nothing

      Exit Sub

    ErrorHandler:
      MsgBox "Error #: " & Err.Number & vbCrLf & vbCrLf & Err.Description
    End Sub
     

    Sucesso!


    .................................................................................
    Vídeos, livros, kit MontaRibbons e acesso vitalício ao site UsandoAcces  
    Clique AQUI e analise o custo beneficio do material oferecido.
    avatar
    Convidado
    Convidado


    [Resolvido]Tratar excecao (Erro) Empty Re: [Resolvido]Tratar excecao (Erro)

    Mensagem  Convidado 16/2/2013, 17:19

    Uma ideia tambem e a seguinte.

    Serão gerados registros para as 3 tabelas.... é um registro para cada tabela?

    Se for, em cada codigo de geracao do registro guadariamos a ID gerada em uma variavel, ex:
    Variáveis: ID_ Tabela1, ID_Tabela2, ID_Tabela3...

    A cada tabela gerado o registro essa variavel guardaria o valor do ID, e caso ocorresse erro em alguma delas, no tratamento de erros executariamos a deleção destes registros quando ID_Registro = ID_Tabela(1,2 ou 3)

    Atraves do comando CurrentDb.Execute "DELETE * From NomeTabela WHERE ID = ID_Tabela(1,2 ou 3)

    é por ai

    Cumprimentos.
    avatar
    Convidado
    Convidado


    [Resolvido]Tratar excecao (Erro) Empty Re: [Resolvido]Tratar excecao (Erro)

    Mensagem  Convidado 16/2/2013, 17:20

    Ops!!!, não percebi que estavas a responder Grande Avelino.


    Cumprimentos.
    avatar
    Leticia.*-*
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Feminino
    Localização : Brasil
    Mensagens : 63
    Registrado : 02/12/2012

    [Resolvido]Tratar excecao (Erro) Empty Re: [Resolvido]Tratar excecao (Erro)

    Mensagem  Leticia.*-* 22/2/2013, 17:49

    Piloto !
    Sua sugestao funcionou perfeitamente, mas nos caso onde faco Update e delete terei que pensar em uma melhor solucao mas por enquando onde faco somente insercao estar funcionando!

    Obg!
    avatar
    Convidado
    Convidado


    [Resolvido]Tratar excecao (Erro) Empty Re: [Resolvido]Tratar excecao (Erro)

    Mensagem  Convidado 25/2/2013, 10:31

    Podes utilizar o Update em uma instrução recordset, ao invés de uma instruçõ CurrentDb.Execute.... Assim utilizando o Update no recordset, podes utilizar as instruções sugerida pelo Mestre avelino acima... Creio ser a melhor opção.

    Cumprimentos.

    Conteúdo patrocinado


    [Resolvido]Tratar excecao (Erro) Empty Re: [Resolvido]Tratar excecao (Erro)

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 8/11/2024, 06:54