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.
Uruchom program Microsoft Access.
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.
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
Uruchom procedurę subCloseObjects.
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla