2010-03-30 10 views

Respuesta

11

Al utilizar el método "Cerrar" está cerrando la conexión a la base de datos pero todavía está en la memoria donde puede abrir nuevamente usando el método "Abrir".

Al establecer el conjunto de registros en "Nothing", el objeto se libera por completo de la memoria.

+0

Por lo tanto, no haciendo una derivación de la necesidad de hacer el otro? –

+0

No, en realidad, aunque puede omitir la configuración del conjunto de registros a nada y no encontrará ningún error. Es solo que es la mejor práctica configurar el conjunto de reinssets a nada después de que lo cerraste, especialmente cuando no tienes ningún uso para ese conjunto de registros o no vas a acceder al mismo conjunto de registros nuevamente. –

+2

Su respuesta se refiere a las conexiones de la base de datos, pero la pregunta utilizó un conjunto de registros. Las variables de la base de datos son diferentes de las demás, ya que lo que puede hacer con seguridad depende de cómo se hayan inicializado (CurrentDB vs. DBEngine (0) (0)). Con una variable de conjunto de registros, el cierre del conjunto de registros no cierra en absoluto la conexión de la base de datos. –

7

El método Close elimina la estructura de la memoria.

Al establecer la variable en Nada, se borra el puntero a esa estructura de memoria.

Teóricamente, borrar el puntero debería liberar la memoria a la que se refería el puntero, porque VBA utiliza el recuento de referencias para determinar cuándo puede liberar memoria. Desafortunadamente, varias cosas pueden salir mal y el recuento de referencias puede terminar fuera de control, y la memoria no se liberará, incluso cuando debería ser.

Por lo tanto, para estar seguro de que no está sujeto a fugas de memoria, o los tipos extraños de errores causados ​​por referencias implícitas y no publicadas, ambos se cierran y se configuran en Nothing.

5

Puede establecer registros de Nada sin necesidad de llamar a Close, de acuerdo a la documentación oficial:

Una alternativa al método Close es establecer el valor de una variable de objeto en Nothing (Set dbsTemp = nada) .

Más información: Recordset.Close Method (DAO)

Cuestiones relacionadas