Public Sub FechaRecordset ( rs as Recordset )
On Error Resume Next
rs.Close
Set rs = Nothing
End Sub
Public Sub FechaDatabase (db as Database )
On Error Resume Next
db.Close
Set db = Nothing
End Sub
Onde quer que você declare uma variável como Recordset, seja a nível de módulo ou de procedimento, certifique-se de chamar a rotina de fechamento explícito dos recordsets ao sair do escopo em questão. Atente especialmente para colocar uma rotina de tratamento de erros dentro de cada procedimento que declarar variável do tipo Recordset. Como você não tem como saber se um erro terá ocorrido antes ou depois de instanciar objetos Recordset nas variáveis declaradas, e como em tratamentos de erros não há como usar a cláusula On Error, é necessário ter uma rotina que pode tratar internamente o erro que ocorreria ao se chamar o método Close para um objeto que nem tenha sido instanciado ainda. Seja dentro dos tratamentos de erros ou em qualquer parte, chame sempre FechaRecordset para todas as variáveis do tipo Recordset que estiverem saindo do escopo. Se estiver usando DAO, faça o mesmo com os objetos Database quando não mais for usá-los ou ao encerrar sua aplicação. Se estiver usando ADO, faça o mesmo com as conexões quando não mais precisar usá-las ou ao encerrar sua aplicação.
Conheço inúmeros relatos de problemas recorrentes de corrupção de bancos de dados Access que foram resolvidos com esta medida simples e que deve se tornar um hábito de programação.