Conexion basic con excel

Hola, Tengo el siguiente problema:
Tengo una macro en Basic y Excel y en ella tengo un procedimiento indispensabel que me consolida y categoriza una cantidad relaticamente grande de información.
Realizo las conexiones y las consultas satisfactoriamente en resumidas cuentas así:
Dim cn As Object
' crea un objeto Connection
Set cn = CreateObject("ADODB.Connection")
ruta = ThisWorkbook.Path
fichero = ThisWorkbook.Name
cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ruta & "\" &   fichero & ";Extended Properties=""Excel 8.0;HDR=Yes;"""
' variable para al rec de ado
Dim rst As Object
' abre la conexión a la base de datos
cn.Open
' crea un nuevo objeto recordset
Set rst = CreateObject("ADODB.Recordset")
' Ejecuta el sql para llenar el recordset
rst.Open sql, cn
' recorre todo el recordset hasta el final y realizo las acciones que necesito
' cierra y descarga las referencias
On Error Resume Next
rst.Close
cn.Close
Set cn = Nothing
Set rst = Nothing
El problema es que debo ejecutar estas instrucciones n numero de veces dependiendo de determinadas condiciones ya que están dentro de un ciclo cuyo numero de ejecuciones dependen del grado de detalle que el usuario le quiera dar a la consolidación que realiza la macro, y en el pero de los casos el ciclo se ejecutara 2880 veces, por lo que la macro no es capaz de correr ya que el equipo se queda sin memoria en un equipo con 512 de RAM y probé en uno con 3G de RAM y tampoco funciona.
Probe sacando del ciclo todas la instrucciones que te mostre anteriormente, excepto:
rst.Open sql, cn
' recorre todo el recordset hasta el final y realizo las acciones que necesito
' cierra y descarga las referencias
On Error Resume Next
rst.Close
Ya que estas no pueden ir fuera del ciclo por que precisamente lo que requiero es ejecutar las n veces necesarias una consulta sql distinta, y tampoco funciona.
La conclusión es que ejecutar ese rst.Open la n veces se consume toda la memoria del equipo y pareciese que el rst.Close no lo contrarresta.
Te agradezco mucho la atención prestada y toda la ayuda que me puedas dar

1 Respuesta

Respuesta
1
Debes sacar del for lo referente a la conexion , o sea el cn.Open debe quedar antes de iniciar el for... next
El recordset lo haces igual a VbNull e vez de cerrarlo, eso le dará mayor rapidez y mejor aprovechamiento de la memoria.
Hola otra vez,
como me recomendaste lo hace más rapido, pero aun así el consumo de memoria es tal que bloquea el equipo.
Si miro el administrador de tareas mientras corre el procedimiento, el proceso de excel llega a un consumo de memoria demasiado alto.
¿Cómo puedo decirle que libere memoria?... ¿O qué otra cosa puedo hacer para evitar que se consumo tanta memoria?
Si bares varias veces o diferentes archivos de excel, abre uno haz lo que tengas que hace ry ciérralo, luego abre el otro y así sucesivamente

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas