O modo como muitos de nós programamos no MS Access, utilizando o DAO, finda por nos expor a alguns erros peculiares com o quais precisamos aprender a lidar.
Um destes é o erro 3021 - Run-time error 3021: O BOF ou EOF for VERDADEIRO, ou o registro atual foi eliminado. A operação solicitada requer um registro atual.
Seguindo o padrão "Microsoftniano" poderíamos analisar o erro sobre os seguintes aspectos: Sintomas, Ponto da situação, Como contornar.
SINTOMAS
Este erro ocorre quando o recordset está vazio.
SITUAÇÃO
Este é um problema conhecido (SMR 21204) e será resolvido num FRx Service Pack futuro. Atribuições de Service Pack não são uma garantia e podem ser alteradas a qualquer momento.
CONTORNAR
Uma solução simples é a de checar se está no final da tabela antes de executar o processo:
if rsBaseDados.EOF=false then
rotina
end if
Normalmente adiciono um tratamento do erro para enganar o processo e dar continuidade ao processamento:
Public Function QueryRecord()On Error GoTo ErrorHandler' Seu código fica aqui' ...........................ErrorHandlerExit:Exit SubErrorHandler:If Err = 3021 Then ' Sem registro corrente Resume NextElseMsgBox "Erro Nº: " & Err.Number & "; Descrição: " & Err.DescriptionResume ErrorHandlerExitEnd IfEnd Function
15.01.2025
Public Function QueryRecord()' Variável para o tratamento de erroOn Error GoTo ErrorHandler' Adicione seu código principal aqui' Exemplo de consulta ou operação com registros' Aqui, você pode colocar a lógica que deseja executar, como abrir um recordset ou consultar dados.' Verifique se há registros ou outros tipos de operações' Exemplo:' Dim rs As Recordset' Set rs = CurrentDb.OpenRecordset("SELECT * FROM MyTable")' Verifique se há registros ou não' If rs.EOF Then' MsgBox "Nenhum registro encontrado!"' Exit Function' End If' Seu código continua aqui...' Se tudo for bem-sucedido, saímos da funçãoExit FunctionErrorHandler:' Tratar erros específicos de forma mais detalhadaSelect Case Err.NumberCase 3021 ' Erro: Nenhum registro encontradoMsgBox "Erro 3021: Nenhum registro corrente. Não há dados disponíveis para a consulta.", vbExclamation, "Aviso"Resume Next ' Retorna à linha seguinte após o erro, para tentar seguir o fluxo do códigoCase Else' Para outros erros, exibe uma mensagem detalhada com o número do erro e a descriçãoMsgBox "Erro Nº: " & Err.Number & vbCrLf & "Descrição: " & Err.Description, vbCritical, "Erro Inesperado"' Aqui, você pode adicionar algum código adicional para registrar erros ou fechar objetos abertos' Se você desejar, pode registrar o erro em algum log, por exemplo:' LogError Err.Number, Err.Description, "QueryRecord"' Resume, para continuar após o erro (ou opcionalmente você pode finalizar a execução)Resume ErrorHandlerExitEnd SelectErrorHandlerExit:' Aqui você pode colocar o código para liberar objetos ou realizar qualquer limpeza necessária' Exemplo:' Set rs = Nothing' Finalizando a execuçãoEnd Function
Clique aqui e nos contate via What's App para avaliarmos seus projetos
Envie seus comentários e sugestões e compartilhe este artigo!
brazilsalesforceeffectiveness@gmail.com
PUDIM PROJECT















Nenhum comentário:
Postar um comentário