Como evitar a sobrecarga da base de dados depois de utilizar Objetos de Acesso a Dados (DAO)

Moderado: requer competências básicas de macro, codificação e interoperabilidade.

Este artigo aplica-se apenas a uma base de dados do Microsoft Access (.mdb).

Sintomas

Uma base de dados do Microsoft Access começou a aumentar (ou a crescer rapidamente) depois de implementar Objetos de Acesso a Dados (DAO) para abrir um conjunto de registos.

Causa

Se não libertar a memória de um conjunto de registos sempre que percorrer o código do conjunto de registos, o DAO poderá recompilar, utilizando mais memória e aumentando o tamanho da base de dados.

Resolução

Para evitar consumir recursos desnecessários e aumentar o tamanho da base de dados, utilize o método Fechar do objeto Conjunto de registos para fechar explicitamente a memória do conjunto de registos quando já não precisar do conjunto de registos.

Se a base de dados tiver aumentado de tamanho porque não utilizou o método Fechar do objeto Conjunto de registos, pode reduzir o tamanho da base de dados ao executar o utilitário Compactar e Reparar (no menu Ferramentas).

Mais informações

Quando criar um objeto Conjunto de Registos (ou um QueryDef) no código, feche explicitamente o objeto quando tiver terminado. O Microsoft Access fecha automaticamente objetos Recordset e QueryDef na maioria das circunstâncias. No entanto, se fechar explicitamente o objeto no código, pode evitar instâncias ocasionais quando o objeto permanecer aberto. Os passos seguintes mostram-lhe como utilizar o DAO para fechar um objeto Conjunto de registos ou QueryDef.

  1. Inicie o Microsoft Access.

  2. Abra a base de dados de exemplo Northwind.mdb.

    NOTA O código de exemplo neste artigo utiliza Objetos do Microsoft Data Access. Para que este código seja executado corretamente, tem de referenciar a Biblioteca de Objetos do Microsoft DAO 3.6. Para tal, clique em Referências no menu Ferramentas no Visual Basic Revisor e certifique-se de que a caixa de verificação Biblioteca de Objetos do Microsoft DAO 3.6 está selecionada.

  3. Copie o seguinte código para um novo módulo. O código de exemplo seguinte abre e fecha um conjunto de registos e um objeto QueryDef e apresenta as informações do Conjunto de registos e do QueryDef nas caixas de mensagens.

    Option Compare Database
    Option Explicit
    
    Sub subCloseObjects()
        Dim db As DAO.Database
        Dim rs As DAO.Recordset
        Dim qd As DAO.QueryDef
    
    Set db = CurrentDb
        Set rs = db.OpenRecordset("Employees", dbOpenTable)
        Set qd = db.QueryDefs("Invoices")
    
    rs.MoveLast    'Move to the last record in the Recordset.
    
    MsgBox "The Employees Recordset is open." & vbCrLf & _
               "The last Employee ID is " & rs![EmployeeID] & "."
        MsgBox "The Invoices query definition is open." & vbCrLf & _
               "The first field in the query is " & qd.Fields(0).Name
    
    'Explicitly close the Recordset and QueryDef objects.
        rs.Close
        qd.Close
    End Sub
    
    
  4. Execute a rotina subCloseObjects.