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.
Avviare Microsoft Access.
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.
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
Eseguire la routine subCloseObjects.
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per