Sim pode e talvez esta dica não resolva o problema, mas uma das causas mais comuns para repetidas corrupções de bases de dados Access é o não fechamento e destruição dos explícitos de objetos Recordset e Database (quando se usa DAO).
Quando criar objetos ou códigos VBA isolados, devem sempre, ir a Debug e fazer o Compile, corrigir todos os erros apresentados.
Também sempre que criar uma aplicação usando Access, deve criar rotinas de fechar recordsets e databases, para usar dentro dos tratamentos de erros.
Estas rotinas são criadas desta forma:
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 de onde está no momento.
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 objecto 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 precisar usá-las ou ao encerrar sua aplicação.
Existem inúmeros relatos de problemas recorrentes de corrupção de bancos de dados Access que foram resolvidos com esta medida simples e que deve tornar-se um hábito de programação.
Quando criar objetos ou códigos VBA isolados, devem sempre, ir a Debug e fazer o Compile, corrigir todos os erros apresentados.
Também sempre que criar uma aplicação usando Access, deve criar rotinas de fechar recordsets e databases, para usar dentro dos tratamentos de erros.
Estas rotinas são criadas desta forma:
On Error Resume Next
rs.Close
Set rs = Nothing
End Sub
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 de onde está no momento.
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 objecto 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 precisar usá-las ou ao encerrar sua aplicação.
Existem inúmeros relatos de problemas recorrentes de corrupção de bancos de dados Access que foram resolvidos com esta medida simples e que deve tornar-se um hábito de programação.