Come evitare il gonfiore del database dopo l'uso di Oggetti di accesso ai dati (DAO)

Moderato: richiede competenze di base di macro, codifica e interoperabilità.

Questo articolo si applica solo a un database di Microsoft Access (.mdb).

Sintomi

Un database di Microsoft Access ha iniziato a gonfiarsi (o a crescere rapidamente) dopo l'implementazione di Oggetti di accesso ai dati (DAO) per aprire un recordset.

Causa

Se non si rilascia la memoria di un recordset ogni volta che si esegue un ciclo nel codice del recordset, DAO può ricompilare, utilizzando più memoria e aumentando le dimensioni del database.

Risoluzione

Per evitare l'utilizzo di risorse non necessarie e l'aumento delle dimensioni del database, utilizzare il metodo Close dell'oggetto Recordset per chiudere in modo esplicito la memoria del recordset quando il recordset non è più necessario.

Se le dimensioni del database sono aumentate perché non è stato utilizzato il metodo Close dell'oggetto Recordset, è possibile ridurre le dimensioni del database eseguendo l'utilità Compact e Repair (dal menu Strumenti).

Ulteriori informazioni

Quando si crea un oggetto Recordset (o QueryDef) nel codice, chiudere in modo esplicito l'oggetto al termine. Nella maggior parte dei casi, Microsoft Access chiude automaticamente oggetti Recordset e QueryDef. Tuttavia, se si chiude in modo esplicito l'oggetto nel codice, è possibile evitare istanze occasionali quando l'oggetto rimane aperto. La procedura seguente illustra come utilizzare DAO per chiudere un oggetto Recordset o QueryDef.

  1. Avviare Microsoft Access.

  2. Aprire il Northwind.mdb di database di esempio.

    NOTA Il codice di esempio in questo articolo usa oggetti di Microsoft Data Access. Per l'esecuzione corretta di questo codice, è necessario fare riferimento alla libreria di oggetti Microsoft DAO 3.6. A tale scopo, fare clic su Riferimenti nel menu Strumenti in Visual Basic Editor e verificare che la casella di controllo Libreria oggetti di Microsoft DAO 3.6 sia selezionata.

  3. Copiare il codice seguente in un nuovo modulo. Il codice di esempio seguente apre e chiude un oggetto Recordset e un oggetto QueryDef e visualizza le informazioni su Recordset e QueryDef all'interno di finestre di messaggio.

    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. Eseguire la routine subCloseObjects.