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.

  1. Starten Sie Microsoft Access.

  2. Ö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.

  3. 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
    
    
  4. Führen Sie die subCloseObjects-Routine aus.