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
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 de Roberto Alvarado
1
