Saltar al contenido

Recorrer dos mas recordset con un solo do while


Recommended Posts

publicado

Necesito enviar  al libro2 hoja banco a través de una consulta sql todos los pagos de los meses de enero a marzo mayores a 0 de la tabla Rel de igual forma a libro2 hoja pagos de la tabla Pagos de los meses enero a marzo los impuestos mayores a 0

Como hago para consultar las tablas y moverme los los recordset con un solo do while y no repetir el do wile por cada consulta que haga. Gracias de antemano.

'Conexion
sqL = Select fecha, pagado, debe from [Rel] where beetwin fecha #1/1/2020# and #31/3/2020#  and debe >0 orden por fecha

'Abrir sql

'Para Hoja Banco
With Libro.Hoja
Uf = .Range("A1000").End(xlUp).Row + 1
Z = 0

Do while Rst.eof
    .Cells(Uf + Z, "A") = Rst("FECHA")
    .Cells(Uf + Z, "b") = Rst("PAGADO")
    .Cells(Uf + Z, "e") = Rst("DEBE")
    Rst.MoveNext
        Z = Z + 1
loop
end with

sqL = Select fecha, pagado, impuesto from [Pagos] where beetwin fecha #1/1/2020# and #31/3/2020#  and impuesto >0 orden por fecha
'Abrir sql

'Para Hoja Pago
With Libro.Hoja
Uf = .Range("A1000").End(xlUp).Row + 1
Z = 0

Do while Rst.eof
    .Cells(Uf + Z, "A") = Rst("FECHA")
    .Cells(Uf + Z, "B") = Rst("PAGADO")
    .Cells(Uf + Z, "F") = Rst("IMPUESTO")
    Rst.MoveNext
        Z = Z + 1
loop
end with

Libros.rar

publicado

Hola @RadioViraje73, no es necesario recorrer con un ciclo while un recordset, puedes copiar los datos directamente a la hoja de excel con la instrucción .CopyFromRecordset

Sheets("Hoja1").Range("A2").CopyFromRecordset Rst

Saludos

publicado

Hola  AlexanderSgracias por responder, la dificultad con esa instrucción es que pega los datos en columnas contiguas y lo que necesito es que se copien el ciertas columnas por ejemplo, del Recordset la columas FECHA va en la Columna A, PAGADO  en la columnas B, pero el DEBE van en la columna F y alguna veces en la columna G. Gracias por anticipado.

Range("A2").CopyFromRecordset Rst
publicado

@RadioViraje73, correcto la instrucción copiara los datos en columnas contiguas, entonces tienes algunas opciones: 1 utilizar un ciclo while para leer cada columna de tu tabla individualmente o 2 realizar una consulta a por cada columna para poder utilizar el .CopyFromRecordset, algo como esto:

Columnas = Array("FECHA", "PAGADO", "DEBE")

For Each param In Columnas

Sql = Replace("SELECT ? FROM [Datos$] where (FECHA BETWEEN #1/1/2020# and #31/3/2020#) and DEBE >0", "?", param)

Rst.Open Sql, cn, 3, 3

Select Case param
Case Is = "FECHA": Sheets("Resultado").Range("A2").CopyFromRecordset Rst
Case Is = "PAGADO": Sheets("Resultado").Range("B2").CopyFromRecordset Rst
Case Is = "DEBE": Sheets("Resultado").Range("F2").CopyFromRecordset Rst

End Select
Rst.Close
Next

Adjunto un pequeño ejemplo, en mi caso la tabla esta en el mismo libro.

Obviamente es mas rápido utilizar un ciclo para leer 3 columnas que uno para leer X cantidad de filas. 

Comentas, saludos. 

Ejem SQL.xlsm

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.