Comment éviter une surcharge de base de données après l’utilisation d’objets DAO (Data Access Objects)

Modéré : nécessite des compétences de base en macro, en codage et en interopérabilité.

Cet article s’applique uniquement à une base de données Microsoft Access (.mdb).

Symptômes

Une base de données Microsoft Access a commencé à grossir (ou à augmenter rapidement en taille) après l’implémentation d’objets DAO (Data Access Objects) pour ouvrir un jeu d’enregistrements.

Cause

Si vous ne libérez pas la mémoire d’un jeu d’enregistrements chaque fois que vous parcourez le code du jeu d’enregistrements, DAO peut se recompiler, en utilisant davantage de mémoire et en augmentant la taille de la base de données.

Résolution

Pour éviter de consommer des ressources inutiles et d’augmenter la taille de la base de données, utilisez la méthode Close de l’objet Recordset pour fermer explicitement la mémoire du jeu d’enregistrements lorsque vous n’avez plus besoin du jeu d’enregistrements.

Si la taille de la base de données a augmenté car vous n’avez pas utilisé la méthode Close de l’objet Recordset, vous pouvez réduire la taille de la base de données en exécutant l’utilitaire Compact et Réparer (dans le menu Outils).

Informations supplémentaires

Lorsque vous créez un objet Recordset (ou QueryDef) dans le code, fermez explicitement l’objet lorsque vous avez terminé. Microsoft Access ferme automatiquement les objets Recordset et QueryDef dans la plupart des cas. Toutefois, si vous fermez explicitement l’objet dans votre code, vous pouvez éviter des instances occasionnelles lorsque l’objet reste ouvert. Les étapes suivantes vous montrent comment utiliser DAO pour fermer un objet Recordset ou QueryDef.

  1. Démarrez Microsoft Access.

  2. Ouvrez l’exemple de base de données Northwind.mdb.

    NOTE L’exemple de code de cet article utilise Microsoft Data Access Objects. Pour que ce code s’exécute correctement, vous devez référencer la bibliothèque d’objets Microsoft DAO 3.6. Pour ce faire, cliquez sur Références dans le menu Outils de la Rédacteur Visual Basic et vérifiez que la zone d’case activée Bibliothèque d’objets Microsoft DAO 3.6 est activée.

  3. Copiez le code suivant dans un nouveau module. L’exemple de code suivant ouvre et ferme un recordset et un objet QueryDef, et affiche les informations Recordset et QueryDef dans les boîtes de message.

    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. Exécutez la routine subCloseObjects.