Hola!
Los objetos Recordset y Connection tienen el método Close, que cierran la conexión y liberan los recursos que hubiesen reservado, y no usa parámetros.
Lo único que debes tener en cuenta es que si por cualquier razón no has inicializado un objeto de estos tipos, no podrás cerrarlo (no estaría abierto), y te saltará un error interceptable.
Lo suyo es que cuando vayas a cerrar un recordset, lo hagas de esta forma:
Código:
If Not <recordset> Is Nothing Then Call <recordset>.Close
En tu caso, puedes poner al final de tu función RecuperaConsulta:
Código:
If Not rstGeneral Is Nothing Then Call rstGeneral.Close
If Not cntReal Is Nothing Then Call cntReal.Close
Set rstGeneral = Nothing
Set cntReal = Nothing
Esto te cerrará el recordset, si se ha inicializado, y después la conexión, si también se ha inicializado. Recuerda cerrar siempre
de abajo a arriba en la jerarquía (un objeto Recordset se inicializa a partir de uno Connection, si cierras primero el Connection puede darte problemas). Establecer a Nothing una variable de objeto no es necesario por lo general si se utiliza Close, pero es una buena práctica de programación indicarlo en lugar de dejárselo al compilador.
En general casi todos los objetos o procedimientos que tienen un método Open u Open
loquesea, tienen el Close para finalizar su conexión y dejar el sistema limpito.
No obstante, ten en cuenta que abrir y cerrar recordsets y conexiones es un proceso muy pesado, y si haces un uso intensivo de funciones como esta, tu aplicación puede volverse muy lenta. Te aconsejo que intentes siempre reducir al máximo el número de aperturas y cierres.