Jak zapobiegać nadęciom bazy danych po użyciu obiektów dostępu do danych (DAO)

Umiarkowane: wymaga podstawowych umiejętności w zakresie makra, 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 rosnąć) po zaimplementowaniu obiektów dostępu do danych (DAO) w celu otwarcia zestawu rekordów.

Przyczyna

Jeśli nie zwolnisz pamięci zestawu rekordów za każdym razem, gdy wykonujesz pętlę za pomocą kodu zestawu rekordów, dao może ponownie skompilować, używając większej ilości pamięci i zwiększając rozmiar bazy danych.

Rozwiązanie

Aby uniknąć użycia niepotrzebnych zasobów i zwiększenia rozmiaru bazy danych, użyj metody Close obiektu Zestaw rekordów, aby jawnie zamknąć pamięć zestawu rekordów, gdy zestaw rekordów nie będzie już potrzebny.

Jeśli rozmiar bazy danych został zwiększony, ponieważ nie użyto metody Close obiektu Recordset, możesz zmniejszyć rozmiar bazy danych, uruchamiając narzędzie Compact and Repair (w menu Narzędzia).

Więcej informacji

Podczas tworzenia obiektu Zestaw rekordów (lub QueryDef) w kodzie jawnie zamknij obiekt po zakończeniu. Program Microsoft Access automatycznie zamyka obiekty Recordset i QueryDef w większości przypadków. Jeśli jednak jawnie zamkniesz obiekt w kodzie, możesz uniknąć sporadycznych wystąpień, gdy obiekt pozostaje otwarty. W poniższych krokach pokazano, jak za pomocą obiektu DAO zamknąć obiekt Recordset lub QueryDef.

  1. Uruchom program Microsoft Access.

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

    UWAGA Przykładowy kod w tym artykule używa obiektów programu Microsoft Data Access. Aby ten kod działał prawidłowo, należy odwołać się do biblioteki obiektów microsoft DAO 3.6. W tym celu kliknij pozycję Odwołania w menu Narzędzia w Redaktor Visual Basic i upewnij się, że wybrano pole wyboru Biblioteka obiektów dao 3.6 firmy Microsoft.

  3. Skopiuj następujący kod do nowego modułu. Poniższy przykładowy kod otwiera i zamyka obiekt Recordset i QueryDef oraz wyświetla informacje o zestawie rekordów i obiekcie QueryDef w polach komunikatów.

    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.