Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: The_Saint en 31 Julio 2013, 09:34 am



Título: Cuando copio un Recordset no lo copia entero
Publicado por: The_Saint en 31 Julio 2013, 09:34 am
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:
Código:
Debug.Print recsql.Fields.Count

Me devuelve 10
Y si utiliz:
Código:
Range("A1").CopyFromRecordset

Me vuelca en la hoja de excel 7 columnas, ya no se que mas hacer...

Saludos.


Título: Re: Cuando copio un Recordset no lo copia entero
Publicado por: The_Saint en 31 Julio 2013, 12:08 pm
Bueno visto lo visto en el soporte de microsoft voy a buscar otro metodo para volcar la consulta....
 :rolleyes:
(http://img801.imageshack.us/img801/9942/1noa.jpg)


Título: Re: Cuando copio un Recordset no lo copia entero
Publicado por: The_Saint en 31 Julio 2013, 13:00 pm
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:

Código:
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