Cuando copio un Recordset no lo copia entero

Iniciado por The_Saint, 31 Julio 2013, 09:34 AM

0 Miembros y 1 Visitante están viendo este tema.

The_Saint

Buenas:

He creado un código para lanzar consultas en MySql y tengo el siguiente problema.
A la hora de volcar el recordset me vuelca nada mas que 7 columnas cuando hay 10.

Si utilizo la propiedad:
Debug.Print recsql.Fields.Count
Me devuelve 10
Y si utiliz:
Range("A1").CopyFromRecordset
Me vuelca en la hoja de excel 7 columnas, ya no se que mas hacer...

Saludos.
<< Si piensas que eres demasiado pequeño para tener impacto.
Prueba a irte a la cama con un mosquito>>

The_Saint

Bueno visto lo visto en el soporte de microsoft voy a buscar otro metodo para volcar la consulta....
:rolleyes:
<< Si piensas que eres demasiado pequeño para tener impacto.
Prueba a irte a la cama con un mosquito>>

The_Saint

pfff los de Mocosoft son unos maquinas ... (vaya basura de método,falla y ni siquiera da un error...)
es verdad que falla el método lo certifico, al final lo he solucionado con otro código, lo pego por si alguien lo quiere para algún día:


Sub MySql_VolcadoExcel()

Dim conexion As New ADODB.Connection
Dim miservidor As String
Dim bd As String
Dim user As String
Dim i, f, c As Long
Dim rs As ADODB.Recordset



miservidor = "XXXXXXXXX"
bd = "XXXXXXXXX"
user = "XXXXXXXXXXx"
Set conexion = New ADODB.Connection
'ABRE LA CONEXION
conexion.Open "DRIVER={MySQL ODBC 5.2a Driver};SERVER=" & miservidor & ";DATABASE=" & bd & ";UID=" & user & ";password=XXXXX;OPTION=16427"

Set recsql = New ADODB.Recordset
'EJECUTA LA CONSULTA: evidentemente consulta1 es una variable que ya contiene la consulta en si...
recsql.Open consulta1, conexion

ActiveWorkbook.Sheets.Add after:=Worksheets(Worksheets.Count)
ActiveSheet.Name = "Consulta " & NombreConsulta

c = 0
f = 0

' recorre las columnas, añade el nombre del campo al encabezado
For i = 0 To recsql.Fields.Count - 1
Range(Chr(i + 65) & f + 1).Value = recsql.Fields(i).Name
Next

f = f + 1

' recorre todo el RECORDSET hasta el final
Do While Not recsql.EOF

' recorre los campos en el registro actual del RECORDSET para recuperar el dato
For i = 0 To recsql.Fields.Count - 1
' añade el valor a la celda
Range(Chr(c + 65) & (f + 1)).Value = recsql.Fields(c)
c = c + 1
Next

' RESETEA EL INDICE DE LAS COLUMNAS
c = 0
' SUMA UNA FILA
f = f + 1
' SIGUIENTE REGISTRO DEL RECORDSET
recsql.MoveNext
Loop

' Cierra y descarga los objetos
On Error Resume Next
recsql.Close
conexion.Close
Set conexion = Nothing
Set recsql = Nothing

End Sub

<< Si piensas que eres demasiado pequeño para tener impacto.
Prueba a irte a la cama con un mosquito>>