Pretendo sumar el importe de los movimientos anteriores a una fecha de una cuenta

Tengo una tabla los campo, cuenta(numérico doble), fecha (date), importe(numérico doble). Para realizar la suma descrita en la pregunta, creo un formulario donde introduzco fecha inicio, cuenta inicio y cuenta fin y al hacer clic en un botón realizo lo siguiente:

DIM RST As DAO.Recordset,  FINI As Variant, CINI As Double, CFIN As Double, BCTA As Double, TCTA As Double,CONSQL As String, TOTAL AS Double

FINI = Me.FECHA.Value
CINI = Me.CUENTA.Value
CFIN = Me.CUENTAS.Value

FOR BCTA=CINI TO CFIN

        TCTA=BCTA

        Busco la cuenta para saber si existe en movimientos y si existe

CONSQL = "SELECT Sum(MOVIMIENTOS.TOTALMOV) AS SdoIni FROM MOVIMIENTOS" _
      & "WHERE MOVIMIENTOS.Fecha<#" & Format(CDate(FINI), "mm/dd/yyyy") & "#" _
        & " &  And  Movimientos.CUENTA = " & TCTA 

Set RST = CurrentDb.OpenRecordset(CONSQL)

TOTAL= Nz(RST.Fields(0).Value, 0)

Al ejecutar da error de sintaxis en cláusula FROM.

Agradecería, me informaran donde esta el error. He probado de todas las formas, con comillas, sin comillas, etc.. Y no lo veo.

2 respuestas

Respuesta
1

Otra forma de hacerlo, ya que la SQL te da problemas, sería con la función DSum()

Me.TOTAL=NZ(DSum("TOTALMOV","MOVIMIENTOS","CUENTA = " & TCTA & " AND Fecha<#" & Format(CDate(FINI), "mm/dd/yyyy") & "#"),0)

Ya dirás que tal.

Un saludo.


Un nuevo foro de access, visítanos: http://nksvaccessolutions.com/Foro/ 

Respuesta
1

José: Sin profundizar si puede haber otras causas lo que veo es que te falta un espacio después de >> FROM MOVIMIENTOS" o sea FROM MOVIMIENTOS " o bien antes de

"WHERE MOVIMIENTOS.Fecha o sea " WHERE MOVIMIENTOS.Fecha

Si no es eso me comentas. Saludos >> Jacinto

José: Repasando un poco más tu Código y en mi opinión la consulta es incorrecta.

Si no tienes resuelto el problema, prueba con >>

CONSQL = "SELECT Sum(MOVIMIENTOS.TOTALMOV) AS SdoIni FROM MOVIMIENTOS "
CONSQL = CONSQL & "WHERE MOVIMIENTOS.Fecha< #" & Format(CDate(FINI), "mm/dd/yyyy") & "# AND MOVIMIENTOS.CUENTA = " & TCTA

Mis saludos>> Jacinto

Si, tienes toda la razón. La que remites es correcta, yo tenia mal colocados algunos signos y otros sobraban.

Si quiero  el mismo resultado pero entre fecha, debo añadir otro and con la fecha final, es decir:

WHERE MOVIMIENTOS.FECHA>=#" & Format(CDate(FINI), "mm/dd/yyyy") & "#" _
        '& " AND MOVIMIENTOS.FECHA<=#" & Format(CDate(FFIN), "mm/dd/yyyy") & "#" _
        '& " AND MOVIMIENTOS.CUENTA = " & TCTA

Saludos.

José: Dependiendo de tu facilidad para construir SQL largas, te sugiero un método que yo utilizo con frecuencia y que a la hora de detectar fallos de construcción va bien y que consiste en construir segmentos.

Así en tu caso te sugeriría.

Dim FiltroCta As String, FiltroFechas As String, FiltroTotal As String
FiltroCta = “MOVIMIENTOS.CUENTA = " & TCTA
FiltroFechas = "MOVIMIENTOS.FECHA BETWEEN #" & Format(CDate(FINI), #1/1/1900#), "mm/dd/yyyy") & _
                    "# AND #" & Format(CDate(FFIN), #12/31/9999#), "mm/dd/yyyy") & "#"
FiltroTotal = FiltroCta & “ AND “  & FiltroFechas
CONSQL = "SELECT Sum(MOVIMIENTOS.TOTALMOV) AS SdoIni FROM MOVIMIENTOS  WHERE " & FiltroTotal

Ya me contarás. Saludos >> Jacinto

¡Gracias! , no puedo probarlo de momento, solo lo utilizo en mis ratos libres y por aprender algo de un tema que siempre me ha gustado. Si surgiera alguna duda lo comentaría.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas