Så här förhindrar du att databasens storlek blir för stor när du använder Data Access Objects (DAO)

Anteckning

Office 365 ProPlus byter namn till Microsoft 365-appar för företag. Mer information om den här ändringen finns i det här blogginlägget.

Måttlig: Kräver grundläggande makron, kodning och kompatibilitetsfärdigheter.

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

Symptom

En Microsoft Access-databas har börjat öka (eller öka snabbt i storlek) när du implementerat Data Access Objects (DAO) för att öppna en postuppsättning.

Orsak

Om du inte släpper en postuppsättnings minne varje gång du går igenom postuppsättningskoden kan DAO kompilera om, genom att använda mer minne och öka storleken på databasen.

Lösning

Om du vill undvika att använda onödiga resurser och öka databasens storlek använder du metoden Stäng för recordset-objektet 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änder metoden Stäng för recordset-objektet kan du minska databasens storlek genom att köra verktyget Komprimera och reparera (på menyn Verktyg).

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. I Microsoft Access stängs postuppsättningen och QueryDef-objekten automatiskt i de flesta fall. 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 ett Recordset- eller QueryDef-objekt.

  1. Starta Microsoft Access.

  2. Öppna exempeldatabasen Northwind.mdb.

    OBS! I exempelkoden i den här artikeln används 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å menyn Verktyg i Visual Basic Editor och kontrollera att kryssrutan Microsoft DAO 3.6-objektbibliotek är markerad.

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

    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 underCloseObjects-rutinen.