Sumar por registros de un mismo campo en access

Necesitaría que me den una mano con algo que me esta complicando en access, necesito sumar un registro y sus 5 anteriores de un mismo campo y el resultado ubicarlo en otro campo, es para llevar una evolución de un punto cada 6 meses, por lo cual por cada registro debe ejecutar la misma operación... Desde ya muchas gracias !

Ejemplo

1 Respuesta

Respuesta
1

Hago constar que no entiendo tus cálculos, pero...

Si tengo la tabla

En el campo Saldo me va a hacer la suma del registro en curso y los 5 siguientes(fíjate en el campo Existencias)

Construyo un formulario continuo( jamás en la vida le he visto una sola ventaja a los formularios en vista hoja de datos) y le pongo un botón

Cuando lo pulso, va recorriendo los registros haciendo la suma que te dije antes

Comprueba que en el campo Saldo de cada registro pone la suma de Existencias de ese registro y de los 5 siguientes.

El código del botón es

Private Sub Comando7_Click()
DoCmd.GoToRecord , , acFirst
Dim i As Integer
For i = 1 To Me.Recordset.RecordCount
Saldo = DSum("existencias", "productos", "idproducto between " & Me.IdProducto & " and " & Me.IdProducto & "+5")
DoCmd.GoToRecord , , acNext
Next
End Sub

Muchísimas Gracias por la respuesta, realice todo tal cual lo describiste, pero solamente recorre los registros hasta el final sin rellenar el campo "Repeticion", ¿influye en algo que el campo "Escala" sea un campo calculado?..

Y creo que me falto aclarar que la idea es que sea sobre el mismo "punto", a lo que me refiero es a lo siguiente, para seguir la evolución de ese punto necesito que el acumulado sea siempre sobre el mismo, en el ejemplo que me pasaste suma la existencia en general sin discriminar el producto, o sea suma te + cerveza+sirope, mi intención es que sea acumulado sobre mismo item (ya que el id es autonumericono lo puedo usar como agrupador) ejemplo .

Nombre existencias saldo

peras           2                   9

peras           3                   8

peras            2                   6

peras            1                   9

peras            1                 12

peras            1                  

peras            0  

peras            1

peras            5

peras             4

Si el cuadro de texto Escala tiene Origen del Control, que por la imagen da la impresión que así es, da exactamente igual que sea calculado, ya que en el código le estoy diciendo que me sume los valores del campo X de la tabla.

Pero, por si no lo fuera, siempre podrías usar

Repeticion=Dsum("precio*existencias/loquesea","nombretabla","idproducto.....

¡Gracias! Pude resolver en parte ya que me di cuenta del error... el código hace referencia al formulario, cuando lo que necesito es que la función la ejecute sobre el subformulario que esta dentro del formulario principal (diferentes datos de origen relacionados con un punto en común)

¿Cómo debería cambiar el código para que ejecute sobre el subform?

¿Supongo qué es esta línea no?:

For i = 1 To Me.Recordset.RecordCount

Gracias por las respuestas y tu tiempo !!

Te decía que nunca le he visto utilidad ninguna a los formularios en vista hoja de datos. Si fuera en vista formularios continuos podrías ponerle un botón de comando que hiciera la instrucción de arriba. En esta vista no lo admite. Por eso tendrás que dejar el código del botón del formulario tal que así

Private Sub Comando18_Click()
Me. Nombredelsubform. SetFocus
Me. Nombredelsubform.Form! Cantidad. SetFocus
Dim i As Byte
DoCmd.GoToRecord , , acFirst
For i = 1 To Me.Nombredelsubform.Form.Recordset.RecordCount
Me.Nombredelsubform.Form!Cantidad = 15
DoCmd.GoToRecord , , acNext
Next
End Sub

Donde pone ... cantidad=15 tendrías que poner la instrucción que quieres que ejecute

Modifique el código y estoy cerca del lograrlo gracias a tu ayuda, el tema es que ahora respeta el filtro, recorre los campos pero no hace la suma de los registros...así me quedo el código.

Me estoy volviendo loco con esto ja ja

Private Sub btn_Calc_Click()
Me.Subform1.SetFocus
Me.Subform1.Form!Repeticion.SetFocus
DoCmd.GoToRecord , , acFirst
Dim i As Byte
For i = 1 To Me.Subform1.Form.Recordset.RecordCount
Me.Subform1.Form!Repeticion = DSum("Escala", "BASE DATOS ZAFIRO", "id between " & Me.Id & " and " & Me.Id & "+5")
DoCmd.GoToRecord , , acNext
Next
End Sub

Vamos a hacer una cosa. Haz una copia de tu base de datos, sólo con las tablas y formularios implicados y ponle unos cuantos registros inventados. Y mándamela a [email protected]. Si lo haces, en el asunto del mensaje pon tu alias Alejandro Russ, ya que si no sé quien me escribe ni los abro. No te extrañe que tarde un par de días, ya que estoy de vacaciones y en la casa de la playa no tengo internet.

Hola Icue, gracias por la ayuda ante todo, tal vez exprese mal la consulta, igualmente después te envío la base de datos como me solicitaste, aunque te reeplanteo la consulta de otra forma, ya que el código que me pasaste funciona a la perfección, y en realidad necesitaría que se reinicie y arranque de 0 cuando el valor de un campo determinado cambia, lo pongo en imagen.

Eso es en realidad lo que necesitaba sobre la tabla, creo que me complique solo al intentar hacerlo sobre el formulario/subformulario.-

Con esto doy por terminada la explicación, ya que no has querido enviar nada.

Si tengo la tabla Tabla1

En un formulario cualquiera, en este caso el 4 le pongo la tabla1 como subformulario al que le he añadido un botón

Mi ordenador es un portátil y la pantalla no da para más. Cuando aprieto el botón

Con lo que la tabla te quedaría

El código del botón es

Private Sub Comando11_Click()
DoCmd.GoToRecord , , acFirst
Dim i As Integer, Cuantos As Integer
For i = 1 To Me.Recordset.RecordCount
Cuantos = DLast("idloquesea", "tabla1", "corrosion=" & Me.Corrosion & "")
If IdLoQueSea = Cuantos Then
Repeticion = Escala
Else
Repeticion = DSum("escala", "tabla1", "idloquesea between " & Me.IdLoQueSea & " and " & Cuantos & " And Corrosion = " & Me.Corrosion & "")
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas