Så här förhindrar du översvältning i databasen när du har använt dataåtkomstobjekt (DAO)

Måttlig: Kräver grundläggande kunskaper om makron, kodning och samverkan.

Den här artikeln gäller endast för en Microsoft Access-databas (.mdb).

Symptom

En Microsoft Access-databas har börjat svälla (eller växa snabbt i storlek) när du har implementerat dataåtkomstobjekt (DAO) för att öppna en postuppsättning.

Orsak

Om du inte släpper en postuppsättnings minne varje gång du loopar igenom postuppsättningskoden kan DAO kompileras om med mer minne och öka databasens storlek.

Åtgärd

Om du vill undvika att förbruka onödiga resurser och öka databasstorleken använder du metoden Stäng för objektet Recordset för att uttryckligen stänga postuppsättningens minne när du inte längre behöver postuppsättningen.

Om databasen har ökat i storlek eftersom du inte använde metoden Stäng för objektet Recordset kan du minska storleken på databasen genom att köra verktyget Komprimera och reparera (på verktygsmenyn).

Mer information

När du skapar ett postuppsättningsobjekt (eller ett QueryDef)-objekt i kod stänger du uttryckligen objektet när du är klar. Microsoft Access stänger automatiskt objekten Recordset och QueryDef under de flesta omständigheter. Men om du uttryckligen stänger objektet i koden kan du undvika tillfälliga instanser när objektet förblir öppet. Följande steg visar hur du använder DAO för att stänga en postuppsättning eller Ett QueryDef-objekt.

  1. Starta Microsoft Access.

  2. Öppna exempeldatabasen Northwind.mdb.

    OBSERVERA Exempelkoden i den här artikeln använder Microsoft Data Access-objekt. För att den här koden ska köras korrekt måste du referera till Microsoft DAO 3.6-objektbiblioteket. Det gör du genom att klicka på Referenser på verktygsmenyn i Visual Basic-Editor och kontrollera att kryssrutan Objektbibliotek för Microsoft DAO 3.6 är markerad.

  3. Kopiera följande kod till en ny modul. Följande exempelkod öppnar och stänger en postuppsättning och ett QueryDef-objekt och visar både postuppsättnings- och QueryDef-information i meddelanderutorna.

    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. Kör rutinen subCloseObjects.