Visual Basic, VB .NET, ASP, Active X, Access, SQL Server


Seu banco de dados Access vive se corrompendo?


Talvez esta dica não resolva o seu problema, mas uma das causas mais comuns para repetidas corrupções de bases de dados Access é o não fechamento e destruição explícitos de objetos Recordset e Database (quando se usa DAO). Sempre que crio uma aplicação usando Access, crio rotinas de fechamento de recordsets e databases para usar inclusíve dentro de tratamentos de erros. Estas rotinas são criadas assim:

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.