Accesar Excel con ADO

10/05/2010 - 17:30 por JC. | Informe spam
Estoy utilizando Excel como un banco de datos para lo cual realizo la
coneccion que les muestro adelante, pero cuando llego a la "asignacion" del
recordset al cache de la tabla dinamica (ya existente) me da el siguiente
error "Method Recordset of object Pivotcache failed". Me pueden decir como
corregirlo y si estoy haciendo bien la asignacion a la tabla dinamica ya
existente. Esto ultimo lo hice con una ayuda que Hector me dio hace unos años
pero no se si funciona en la actualidad. Uso Excel 2007. Nota: el
CopyFromRecordset lo utilice transitoriamente para saber si la consulta se
estaba ejecutando momentaneamente, aqui es un comentario.

Sub Prueba()
Dim cn As ADODB.Connection
Dim rst As ADODB.Recordset
Dim PC As PivotCache
Dim PT As PivotTable

Set cn = New ADODB.Connection
With cn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data
Source=C:\Users\Owner\Documents\Rendimientos\Cartago.xls;" & _
"Extended Properties=Excel 8.0"
.Open
End With

Set rst = New ADODB.Recordset

With rst
.CursorLocation = adUseClient
.CursorType = adOpenStatic
.LockType = adLockOptimistic
End With

rst.Open "SELECT FECHA, HH, Media, SUM(SUM), Dia FROM
[VentasHora$A1:F15000]" & _
"GROUP BY FECHA, HH, Media, Dia", cn, , , adCmdText

' ThisWorkbook.Worksheets("Sheet4").Range("A2").CopyFromRecordset rst

Set PC = ActiveWorkbook.PivotCaches(4)
Set PC.Recordset = rst
Set PT = ActiveSheet.PivotTables("PivotTable2")
PT.PivotCache.Refresh

rst.Close
Set rst = Nothing
cn.Close
Set cn = Nothing
End Sub

Preguntas similare

Leer las respuestas

#11 JC.
14/05/2010 - 19:00 | Informe spam
Hola Hector

Ahora tengo el problema de que un usuario tiene Excel 2003 y me da el mismo
problema o parecido "Error en el metodo recordset del objeto Pivotcache".

Probe con los dos "metodos de asigancion" del recordset y no me funciona con
ninguno de los dos.

Dentro de las observaciones esta: que la biblioteca de ADO que esta
disponible en la computadora del usuario esta hasta la 2.8 (que es la que
active), no se si hay que activar otra?

Ahora que puede ser? para mi las dos son logicas...es decir deberian de
funcionar a mejos que haya otra consideracion como en el Excel 2007.

JC.


"Héctor Miguel" wrote:

hola, JC !

> Ya te envie el archivo para que le des un vistaso a los proyectos fantasmas para ver si es eso...

creo recordar que a partir de la version 2007 se da un tratamiento distinto a la colecion "caches" de las tablas de datos
estas son las correcciones/adaptaciones/... que hice a tus codigos expuestos y la macro resultante (al final)
corri varias ejecuciones en la version 2007 y no obtuve mas errores ;)

saludos,
hector.

usas windows vista o superior ?...
FALTA: Microsoft ActiveX Data Objects 6.0 Library

la cambio por la version 2.8 (windows-xp)

cambio la linea de apertura de la conexion de esto:
.ConnectionString = "Data Source=C:\Users\Owner\Documents\Pollazo\Rendimientos\ControlMermaCartago.xls;" & _
"Extended Properties=Excel 8.0"

a esto (para no tener que reproducir la misma ubicacion de tu cadena de texto "constante":
.ConnectionString = "Data Source=" & ThisWorkbook.FullName & ";Extended Properties=Excel 8.0"

invierto el orden de creacion de los objetos de la TD de esto:
Set PC = ActiveWorkbook.PivotCaches(1)
Set PC.Recordset = rst
Set PT = ActiveSheet.PivotTables("Tabla dinámica1")
PT.PivotCache.Refresh

a esto:
Set PT = ActiveSheet.PivotTables("Tabla dinámica1")
Set PC = PT.PivotCache
Set PC.Recordset = rst
PT.PivotCache.Refresh

y le agrego la destuccion de los objetos de la TD
Set PT = Nothing
Set PC = Nothing

Sub Prueba()
Dim cn As ADODB.Connection, rst As ADODB.Recordset, PC As PivotCache, PT As PivotTable
Set cn = New ADODB.Connection
With cn
.Provider = "microsoft.jet.oledb.4.0"
.ConnectionString = "data source=" & ThisWorkbook.FullName & ";extended properties=excel 8.0"
.Open
End With
Set rst = New ADODB.Recordset
With rst
.CursorLocation = adUseClient
.CursorType = adOpenStatic
.LockType = adLockOptimistic
End With
rst.Open "select sum(cantidad) as cantidad, HH, Fecha, Media, Dia from [ventaspollohora$a1:f15000]" & _
"group by HH, Fecha, Media, Dia Order by Fecha", cn, , , adCmdText
Set PT = ActiveSheet.PivotTables("Tabla dinámica1")
Set PC = PT.PivotCache
Set PC.Recordset = rst
PT.PivotCache.Refresh
rst.Close
Set rst = Nothing
cn.Close
Set cn = Nothing
Set PT = Nothing
Set PC = Nothing
End Sub


.

Respuesta Responder a este mensaje
#12 Héctor Miguel
14/05/2010 - 20:45 | Informe spam
hola, JC !

no hay mas cambios aparte de quitar la biblioteca "superior" (6.0) y dejas solo la mas baja posible (2.8 o menos ?)

he probado tambien en la version 2003 con la propuesta anterior (modificada) sin mayor problema (?)
es probable que existan (otras ?) referencias "perdidas" en el equipo de ese usuario ?
(podrias comprobar/corregir con el ?)

saludos,
hector.

__ OP __
Ahora tengo el problema de que un usuario tiene Excel 2003
y me da el mismo problema o parecido "Error en el metodo recordset del objeto Pivotcache".

Probe con los dos "metodos de asigancion" del recordset y no me funciona con ninguno de los dos.

Dentro de las observaciones esta: que la biblioteca de ADO que esta disponible en la computadora del usuario
esta hasta la 2.8 (que es la que active), no se si hay que activar otra?

Ahora que puede ser? para mi las dos son logicas...es decir deberian de funcionar
a mejos que haya otra consideracion como en el Excel 2007.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida