Jump to content

Recorrer dos mas recordset con un solo do while


Go to solution Solved by AlexanderS,

Recommended Posts

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

Link to post
Share on other sites

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
Link to post
Share on other sites
  • Solution

@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

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


×
×
  • Create New...

Important Information

Privacy Policy