Verhindern von Datenbanküberblähungen nach der Verwendung von Datenzugriffsobjekten (Data Access Objects, DAO)
Moderat: Erfordert grundlegende Makro-, Programmier- und Interoperabilitätskenntnisse.
Dieser Artikel gilt nur für eine Microsoft Access-Datenbank (.mdb).
Symptome
Eine Microsoft Access-Datenbank hat nach der Implementierung von Datenzugriffsobjekten (DATA Access Objects, DAO) zum Öffnen eines Recordsets zu überfrachten (oder schnell an Größe zuzunehmen) begonnen.
Ursache
Wenn Sie den Arbeitsspeicher eines Recordsets nicht jedes Mal freigeben, wenn Sie den Recordsetcode durchlaufen, kann DAO neu kompilieren, wobei mehr Arbeitsspeicher verwendet und die Größe der Datenbank erhöht wird.
Lösung
Um unnötige Ressourcen zu vermeiden und die Datenbankgröße zu erhöhen, verwenden Sie die Close-Methode des Recordset-Objekts, um den Arbeitsspeicher des Recordsets explizit zu schließen, wenn Sie das Recordset nicht mehr benötigen.
Wenn die Datenbank vergrößert wurde, weil Sie die Close-Methode des Recordset-Objekts nicht verwendet haben, können Sie die Größe der Datenbank verringern, indem Sie das Hilfsprogramm Komprimieren und Reparieren (im Menü Extras) ausführen.
Weitere Informationen
Wenn Sie ein Recordset-Objekt (oder ein QueryDef-Objekt) im Code erstellen, schließen Sie das Objekt explizit, wenn Sie fertig sind. Microsoft Access schließt Recordset- und QueryDef-Objekte unter den meisten Umständen automatisch. Wenn Sie das Objekt jedoch explizit in Ihrem Code schließen, können Sie gelegentliche Instanzen vermeiden, wenn das Objekt geöffnet bleibt. Die folgenden Schritte zeigen, wie Sie DAO verwenden, um ein Recordset- oder QueryDef-Objekt zu schließen.
Starten Sie Microsoft Access.
Öffnen Sie die Beispieldatenbank Northwind.mdb.
HINWEIS Der Beispielcode in diesem Artikel verwendet Microsoft Data Access Objects. Damit dieser Code ordnungsgemäß ausgeführt werden kann, müssen Sie auf die Microsoft DAO 3.6-Objektbibliothek verweisen. Klicken Sie dazu im Visual Basic-Editor im Menü Extras auf Verweise, und stellen Sie sicher, dass das Kontrollkästchen Microsoft DAO 3.6-Objektbibliothek aktiviert ist.
Kopieren Sie den folgenden Code in ein neues Modul. Der folgende Beispielcode öffnet und schließt ein Recordset- und ein QueryDef-Objekt und zeigt sowohl Recordset- als auch QueryDef-Informationen in Meldungsfeldern an.
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
Führen Sie die subCloseObjects-Routine aus.
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für