Database-bloat voorkomen nadat u Data Access Objects (DAO) hebt gebruikt

Gemiddeld: vereist basisvaardigheden voor macro's, codering en interoperabiliteit.

Dit artikel is alleen van toepassing op een Microsoft Access-database (.mdb).

Symptomen

Een Microsoft Access-database begint te bloppen (of groeit snel in grootte) nadat u Data Access Objects (DAO) hebt geïmplementeerd om een recordset te openen.

Oorzaak

Als u het geheugen van een recordset niet telkens vrijgeeft wanneer u de recordsetcode doorloopt, kan DAO opnieuw compileren, meer geheugen gebruiken en de database groter maken.

Oplossing

Als u onnodige resources wilt gebruiken en de database groter wilt maken, gebruikt u de methode Sluiten van het object Recordset om het geheugen van de recordset expliciet te sluiten wanneer u de recordset niet meer nodig hebt.

Als de database groter is geworden omdat u de methode Sluiten van het object Recordset niet hebt gebruikt, kunt u de grootte van de database verkleinen door het hulpprogramma Comprimeren en herstellen uit te voeren (in het menu Extra).

Meer informatie

Wanneer u een Recordset-object (of een QueryDef)-object in code maakt, sluit u het object expliciet wanneer u klaar bent. In de meeste gevallen sluit Microsoft Access automatisch recordset- en QueryDef-objecten. Als u het object echter expliciet sluit in uw code, kunt u af en toe voorkomen dat het object geopend blijft. In de volgende stappen ziet u hoe u DAO gebruikt om een Recordset- of QueryDef-object te sluiten.

  1. Start Microsoft Access.

  2. Open de voorbeelddatabase Northwind.mdb.

    OPMERKING De voorbeeldcode in dit artikel maakt gebruik van Microsoft Data Access-objecten. Deze code wordt alleen correct uitgevoerd als u naar de Microsoft DAO 3.6-objectbibliotheek verwijst. Klik hiervoor op Verwijzingen in het menu Extra in de Visual Basic Editor en zorg ervoor dat het selectievakje Microsoft DAO 3.6-objectbibliotheek is ingeschakeld.

  3. Kopieer de volgende code naar een nieuwe module. Met de volgende voorbeeldcode worden een Recordset en een QueryDef-object geopend en gesloten en worden recordset- en QueryDef-gegevens weergegeven in de berichtvakken.

    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. Voer de subCloseObjects-routine uit.