Como definir una consulta con codigo

Espero que te encuentres bien.

En mi proyecto voy por la parte de pagos, creí que seria fácil, no lo es.

Te acuerdas que tengo una tabla PlanPagos, que contiene el capital, interés y cargos, otra PlanCargos que contiene el detalle de los cargos en un plan de pago.

Bueno para estimar los saldos vencidos, hice una consulta union, que une detalles de PlanPagos y PlanCargos y PagosDet que contiene los pagos de un préstamo para determinar los pagos vencidos, esta consulta se llama "InventarioCargos". Intento aplicar lo que me has enseñado pero ya llevo una semana y no logro que me de resultado.

Esto es lo que intento.

Dim rstSaldosPorServicio As Recordset, rstDetallePago As Recordset

Dim SQLSaldosPorServicio As String

'Definición de una consulta y apertura de los registros, se hace referencia a la consulta union "InventarioCargos" solo que es resumida.

SQLSaldosPorServicio = "SELECT CreNum, ID, Sum(Monto) AS TotalMonto FROM InventarioCargos WHERE PlanFecha<=" & Me.FechaPago & "And CreNum=" & Me.CreNum & "GROUP BY CreNum,ID" Set rstSaldosPorServicio = CurrentDb.OpenRecordset("SQLSaldosPorServicio", dbOpenSnapshot)

En esta parte se detiene y me dice que no encontró la tabla o consulta SQLSaldosPorServicio

Set rstSaldosPorServicio = CurrentDb.OpenRecordset("SQLSaldosPorServicio", dbOpenSnapshot)

Ya lo probé haciendo la consulta aparte y me funciona, hasta lo probé en un subformulario y funciona.

Si te queda tiempo te dejo la base para que mires mi avance.

Prestamos(8) el formulario de pagos se llama PagosEnc (Encabezado de pagos)

1 respuesta

Respuesta
1

Pues después de un rato mirando el código sin verla nada raro, caí en la cuenta de que el problema es de sintaxis:

Set rstSaldosPorServicio = CurrentDb.OpenRecordset(SQLSaldosPorServicio, dbOpenSnapshot)

Te sobran las comillas dentro del OpenRecordset. Las comillas se usan cuando abres un recordset sobre un objeto existente (tabla o consulta) cuando lo abres sobre una variable, va sin ellas.

Además, la SQL tiene dos fallos de sintaxis más, tienes que dejar un espacio en blanco entre las comillas y el AND y entre las comillas y el Group:

SQLSaldosPorServicio = "SELECT CreNum, ID, Sum(Monto) AS TotalMonto FROM InventarioCargos WHERE PlanFecha<=" _
& Me.FechaPago & " And CreNum=" & Me.CreNum & " GROUP BY CreNum,ID"

Y aún tienes otro fallito más:

RstDetallePago. Close

no lo puedes poner dentro de la etiqueta salida, pues si se cumple la condición del If rstSaldosPorServicio.RecordCount = 0 Then Goto Salida, se intentará cerrar un recordset que no está abierto, lo que te dará un error. La solución: ponlo justo después del Loop.

Mi estimadísimo.

Ya hice, las correcciones, ya no me da errores, pero ahora no hace nada de nada.

Mira:

SQLSaldosPorServicio = "SELECT CreNum, ID, Sum(Monto) AS TotalMonto FROM InventarioCargos WHERE PlanFecha<=" & Me.FechaPago & " And CreNum=" & Me.CreNum & " GROUP BY CreNum,ID;"

Set rstSaldosPorServicio = CurrentDb.OpenRecordset(SQLSaldosPorServicio, dbOpenSnapshot).

Lo raro es que si pongo la consulta en un sub formulario si me salen los saldo vencidos.

¿Alguna otra sugerencia por favor?

Vaya!

Me fijé en los errores, pero no en cómo trabajaba el código!

Ahora no recuerdo exactamente cómo es el código, y hasta la tarde no puedo verlo (no tengo access 2010 y en 2007 no abre), pero me parece que no hacías nada con ese recordset, por eso parece que no hace nada.

Si te corre prisa, pégame aquí el código y lo miro, si no, por la tarde te respondo.

Variables

DIM SQLSaldosPorServicio AS String
DIM rstSaldosPorServicio AS Recordset

DIM rstDetallePago AS Recordset

La definición es así:
SQLSaldosPorServicio = "SELECT CreNum, ID, Sum(Monto) AS TotalMonto FROM InventarioCargos " & _ '**InventarioCargos es una Consulta**

"WHERE CreNum=" & Me.CreNum & " AND PlanFecha<=" & Me.FechaPago & _

" GROUP BY CreNum,ID"

Set rstSaldosPorServicio = CurrentDb.OpenRecordset(SQLSaldosPorServicio)

Quiero actualizar esta tabla:
Set rstDetallePago = CurrentDb.OpenRecordset("PagosDet", dbOpenDynaset)

Do Until rstSaldosPorServicio.EOF

rstDetallePago.AddNew

rstDetallePago("IDServicio") = rstSaldosPorServicio("ID")

rstDetallePago("ValorServicio") = rstSaldosPorServicio("ToTalMonto")

rstDetallePago.Update

rstDetallePago.MoveNext

Loop

rstDetallePago.Close

Creo que el error esta en que no se pueden hacer consultas de agrupación o si se puede?

Gracias nuevamente

Buff!

Estoy espeso estos días...

El problema está en que en la SQL estás filtrando por un campo de tipo fecha, y estos campos tienes que encerrarlos entre almohadillas. La SQL seria así:

SQLSaldosPorServicio = "SELECT CreNum, ID, Sum(Monto) AS TotalMonto FROM InventarioCargos WHERE PlanFecha<=#" _
& Me.FechaPago & "# And CreNum=" & Me.CreNum & " GROUP BY CreNum,ID"

Además, me he fijado que en el bloque del Do Until, tienes otro error:

Tienes que cambiar el rstDetallePago. MoveNext por rstSaldosPorServicio. MoveNext.

Y con estos dos "pequeños" cambios, ya se te actualiza la tabla PagosDet, pero con un pequeño inconveniente: te queda el campo "IdPagosEnc" en blanco. Esto lo puedes solucionar cambiándolo a autonumérico, o bien creando un "autonumérico manual" dentro del código del botón Aplicar.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas