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 erro
On 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ção
Exit Function
ErrorHandler:
' Tratar erros específicos de forma mais detalhada
Select Case Err.Number
Case 3021 ' Erro: Nenhum registro encontrado
MsgBox "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ódigo
Case Else
' Para outros erros, exibe uma mensagem detalhada com o número do erro e a descrição
MsgBox "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 ErrorHandlerExit
End Select
ErrorHandlerExit:
' Aqui você pode colocar o código para liberar objetos ou realizar qualquer limpeza necessária
' Exemplo:
' Set rs = Nothing
' Finalizando a execução
End 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