Jak zabránit nafouknutí databáze po použití objektů DAO (Data Access Objects)

Střední: Vyžaduje základní dovednosti v makrech, kódování a interoperabilitě.

Tento článek se týká pouze databáze aplikace Microsoft Access (.mdb).

Příznaky

Databáze Aplikace Microsoft Access začala po implementaci objektu DAO (Data Access Objects) k otevření sady záznamů nafouklá (nebo se rychle zvětšovat).

Příčina

Pokud paměť sady záznamů neuvolníte pokaždé, když projdete kódem sady záznamů, může dao znovu zkompilovat a použít více paměti a zvětšit velikost databáze.

Řešení

Chcete-li se vyhnout spotřebovávejte nepotřebné prostředky a zvětšovat velikost databáze, použijte metodu Close objektu Recordset a explicitně zavřete paměť sady záznamů, když už sadu záznamů nepotřebujete.

Pokud se velikost databáze zvětšila, protože jste nepoužili metodu Close objektu Recordset, můžete velikost databáze zmenšit spuštěním nástroje Zkomprimovat a opravit (v nabídce Nástroje).

Další informace

Při vytváření objektu Recordset (nebo QueryDef) v kódu explicitně zavřete objekt po dokončení. Microsoft Access za většiny okolností automaticky zavře objekty Recordset a QueryDef. Pokud však explicitně zavřete objekt v kódu, můžete se vyhnout občasným instancím, když objekt zůstane otevřený. Následující kroky ukazují, jak pomocí rozhraní DAO zavřít objekt Recordset nebo QueryDef.

  1. Spusťte Aplikaci Microsoft Access.

  2. Otevřete Northwind.mdb ukázkové databáze.

    POZNÁMKA Ukázkový kód v tomto článku používá objekty Microsoft Data Access. Aby tento kód běžel správně, musíte odkazovat na knihovnu objektů Microsoft DAO 3.6. Uděláte to tak, že kliknete na Odkazy v nabídce Nástroje v Editor Jazyka Visual Basic a zkontrolujete, že je zaškrtnuté políčko Knihovna objektů Microsoft DAO 3.6.

  3. Zkopírujte následující kód do nového modulu. Následující ukázkový kód otevře a zavře sadu záznamů a objekt QueryDef a zobrazí informace o sadě záznamů a QueryDef v polích se zprávou.

    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. Spusťte rutinu subCloseObjects.