Jak zapobiec uazdowieniu bazy danych po użyciu obiektu DAO (Data Access Objects)

Uwaga

Nazwa usługi Office 365 ProPlus została zmieniona na Aplikacje usługi Microsoft 365 dla przedsiębiorstw. Aby uzyskać więcej informacji na temat tej zmiany, przeczytaj ten wpis w blogu.

Umiarkowany. Wymaga podstawowych umiejętności makr, kodowania i współdziałania.

Ten artykuł dotyczy tylko bazy danych programu Microsoft Access (mdb).

Symptomy

Baza danych programu Microsoft Access zaczęła powiększać (lub szybko powiększać się) po zaimplementowaniu obiektów DAO (Data Access Objects) w celu otwarcia zestawu rekordów.

Przyczyna

Jeśli pamięć zestawu rekordów nie zostanie zwolnieniu przy każdym pętleniu kodu zestawu rekordów, obiektów DAO może zostać ponownie skompilowane, co zwiększa rozmiar bazy danych i zwiększa ilość pamięci.

Rozwiązanie

Aby uniknąć zużywania niepotrzebnych zasobów i zwiększania rozmiaru bazy danych, użyj metody Close obiektu Recordset (Zamknij) w celu jawnego zamknięcia pamięci zestawu rekordów, gdy nie potrzebujesz już zestawu rekordów.

Jeśli baza danych została zwiększona, ponieważ nie używasz metody Close (Zamknij) obiektu Recordset (Zamknij), możesz zmniejszyć rozmiar bazy danych, uruchamiając narzędzie Kompaktowanie i naprawianie (w menu Narzędzia).

Więcej informacji

Po utworzeniu obiektu Recordset (lub QueryDef) w kodzie po zakończeniu jawnie zamknij ten obiekt. W większości przypadków program Microsoft Access automatycznie zamyka obiekty Recordset i QueryDef. Jeśli jednak bezpośrednio zamkniesz obiekt w kodzie, możesz uniknąć okazjonalnych przypadków, gdy obiekt pozostaje otwarty. W poniższych krokach popisano, jak za pomocą obiektu DAO zamknąć obiekt Recordset lub QueryDef.

  1. Uruchom program Microsoft Access.

  2. Otwórz przykładową bazę danych Northwind.mdb.

    UWAGA W przykładowym kodzie w tym artykule użyto obiektów Microsoft Data Access Objects. Aby ten kod działał poprawnie, musisz odwołać się do biblioteki obiektów platformy Microsoft DAO 3.6. W tym celu kliknij polecenie Odwołania w menu Narzędzia w Edytorze Visual Basic i upewnij się, że jest zaznaczone pole wyboru Biblioteka obiektów platformy Microsoft DAO 3.6.

  3. Skopiuj poniższy kod do nowego modułu. Poniższy przykładowy kod otwiera i zamyka zestaw rekordów i obiekt QueryDef, a także wyświetla w polach wiadomości zarówno informacje Recordset, jak i QueryDef.

    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. Uruchom procedurę subCloseObjects.