Inicio > Visual Basic > ralvaradot > Conexion basic con excel

Conexion basic con excel

Experto:
Usuario:
Fecha: 05/11/2009
Valoración: (3,00 sobre 5) Categoría: Visual Basic
05/11/2009
andressnada, usuario preguntando en Visual Basic
Usuario
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 informacion.
Realizo las conexiones y las consultas satisfactoriamente en resumidas cuentas asi:
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 estan dentro de un ciclo cuyo numero de ejecuciones dependen del grado de detalle que el usuario le quiera dar a la consolidacion 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 probe 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 conclusion es que ejecutar ese rst.Open la n veces se consume toda la memoria del equipo y pareciese que el rst.Close no lo contraresta.
Te agradezco mucho la atencion prestada y toda la ayuda que me puedas dar
 
05/11/2009
andressnada, experto respondiendo en Visual Basic
Experto
Hola
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 dara mayor rapidez y mejor aprovechamiento de la memoria.
Saludos,
05/11/2009
andressnada, usuario preguntando en Visual Basic
Usuario
hola otra vez,
como me recomendaste lo hace mas rapido, pero aun asi el consumo de memoria es tal que bloquea el equipo.
Si miro el administrador de tareas mientras corre el procedimiento, el preoceso de excel llega a un consumo de memoria demasiado alto.
Como puedo decirle que libere memoria?...o que otra cosa puedo hacer para evitar que se consumo tanta memoria?
05/11/2009
andressnada, experto respondiendo en Visual Basic
Experto
Si bares varias veces o diferentes archivos de excel, abre uno haz lo que tengas que hace ry cierralo, luego abre el otro y asi sucesivamente
05/11/2009
andressnada, usuario preguntando en Visual Basic
Usuario
Muchas gracias por tratar de ayudarme, pero no me has entendido.
No te molesto mas
Hasta luego!!!
Enlaces patrocinados