Cómo evitar el sobredimensionamiento de la base de datos después de usar objetos de acceso a datos (DAO)
Moderado: requiere aptitudes básicas de macro, codificación e interoperabilidad.
Este artículo solo se aplica a una base de datos de Microsoft Access (.mdb).
Síntomas
Una base de datos de Microsoft Access ha comenzado a inflarse (o crecer rápidamente en tamaño) después de implementar objetos de acceso a datos (DAO) para abrir un conjunto de registros.
Causa
Si no libera la memoria de un conjunto de registros cada vez que recorre en bucle el código del conjunto de registros, DAO puede volver a compilar, usando más memoria y aumentando el tamaño de la base de datos.
Solución
Para evitar consumir recursos innecesarios y aumentar el tamaño de la base de datos, use el método Close del objeto Recordset para cerrar explícitamente la memoria del conjunto de registros cuando ya no necesite el conjunto de registros.
Si la base de datos ha aumentado de tamaño porque no usó el método Close del objeto Recordset, puede reducir el tamaño de la base de datos ejecutando la utilidad Compact and Repair (en el menú Herramientas).
Más información
Al crear un objeto Recordset (o QueryDef) en el código, cierre explícitamente el objeto cuando haya terminado. Microsoft Access cierra automáticamente los objetos Recordset y QueryDef en la mayoría de las circunstancias. Sin embargo, si cierra explícitamente el objeto en el código, puede evitar instancias ocasionales cuando el objeto permanece abierto. En los pasos siguientes se muestra cómo usar DAO para cerrar un objeto Recordset o QueryDef.
Inicie Microsoft Access.
Abra la Northwind.mdb de base de datos de ejemplo.
NOTA En el código de ejemplo de este artículo se usan objetos de Microsoft Data Access. Para que este código se ejecute correctamente, debe hacer referencia a la biblioteca de objetos de Microsoft DAO 3.6. Para ello, haga clic en Referencias en el menú Herramientas del Editor de Visual Basic y asegúrese de que la casilla Biblioteca de objetos de Microsoft DAO 3.6 esté activada.
Copie el código siguiente en un nuevo módulo. El código de ejemplo siguiente abre y cierra un objeto Recordset y un objeto QueryDef, y muestra la información de Recordset y QueryDef dentro de los cuadros de mensaje.
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
Ejecute la rutina subCloseObjects.
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de