![]() |
||||||
|
|
||||||
Fallos en Access
Dejar objetos abiertosMuchas veces usamos objetos para realizar determinadas tareas, como abrir otras bases de datos, actualizar tablas, enviar correos, ... Para usar estos objetos en VBA, los declaramos, inicializamos y usamos. Pero algunas veces, se nos olvida realizar el último paso: cerrarlos y descargarlos de memoria. Y si no los cerramos o descargamos, ¿qué ocurre? Que ese objeto se puede mantener en la memoria, o consumiendo recursos, mientras nuestra base de datos esté abierta. Y si sólo usamos un objeto y de vez en cuando, posiblemente no nos demos cuenta de esto. Pero cuando son muchos objetos, o consumen mucha memoria, o mantienen una conexión a otra base de datos o servidor de datos, nuestra aplicación, y el ordenador donde se ejecute, se van a resentir. Primero será el consumo de memoria, que se irá incrementando. A la vez, se incrementará el uso de la CPU y, si usamos conexiones a otras bases de datos, las nuevas conexiones se ralentizarán. E incluso, si nuestra base de datos trabaja en red, la velocidad de la red se puede ver afectada y disminuir con el paso del tiempo. Para evitar estos problemas, debemos cerrar y/o descargar los objetos cuando no los usemos. Por ejemplo, si usamos un objeto
Public Sub ActualizaRegistros()
Dim rst As DAO.Recordset Dim strSql As String Dim strCampo As String strSql = "SELECT Campo2 FROM Tabla1" Set rst = CurrentDb.OpenRecordset(strSql) Do While Not rst.EOF strCampo = "Modificado" rst.Edit rst("Campo2") = strCampo rst.Update Loop rst.Close Set rst = Nothing End Sub En este ejemplo, declaramos el objeto Hay objetos que no tienen un método ¿Y cómo sé que debo cerrar un objeto? Para saber si hay que liberar un objeto, debemos comprobar qué métodos tiene, y qué hace cada uno de ellos, además del archivo de ayuda que pueda tener el objeto, o ejemplos de uso que haya en Internet. En la base de datos de ejemplo de los apuntes, hay dos funciones que abren una serie de objetos (
La diferencia en este caso no es considerable hoy en día, con los ordenadores que hay (no llega a 1 mega de memoria), pero es una diferencia que se puede incrementar, si se reutiliza la función una y otra vez. Además, el test se ha hecho contra la misma base de datos, pero si está en red, también se reduce la velocidad de esta, además que las conexiones a la base de datos aumentan. |
||||||
|
2008 Patxi Sanz Libro de visitas |