Actualizar sin cambiar de registro access

En un formulario en modo tubular, osea cada línea es un registro, tengo varios controles calculados, como suma totales y otros. ¿Existe alguna forma de que se actualicen los totales al cambiar de campo sin cambiar de registro?. Si uso 'recall' después de actualizar lo hace pero, cambia el registro corriente y el foco del control donde estaba y es como si cargo todo de nuevo. ¿Alguien sabe como hacerlo?

2 Respuestas

Respuesta
1

En el evento después de actualizar de tu campo, usa la propiedad requery en tu campo total algo así:

Private Sub txtCampo_AfterUpdate()
  me.txtTotal.Requery
End Sub

Recalc actualiza todo el form

Requery un control en especifico

Gracias por tu rápida respuesta. Usé lo que me dices pero no consigo ningún efecto. Es como que no se ha salvado el registro en cuestión y el requery sigue devolviendo el valor anterior al cambio. Pienso que debo forzar a guardar el registro...

Disculpa no lei bien.

¿Existe alguna forma de que se actualicen los totales al cambiar de campo sin cambiar de registro?

Estebe provando, según yo no se puede. Tienes que hacer clic en el siguiente registro o mandar el foco al a otro control

Con esta instruccion cambias de registro

DoCmd. GoToRecord,, acNewRec

Inspirado en tu respuesta he probado en el evento despuesDeActualizar a hacer ...

DoCmd. GoToRecord,, acNex

DoCmd. GoToRecord,, acPrevious

y aparentemente !! funciona ¡¡¡

Bien.

Respuesta
1

Jerónimo, me da la impresión de que los cálculos los haces en el origen de control. Eso tiene un inconveniente, si quisieras guardar ese valor en un campo, no podrías(excepto en código VB), ya que el origen del control está "ocupado". Por eso, si me permites un consejo, los cálculos hazlos en código, como te dice Antonio. Por ejemplo, supongamos que tienes Detalle de venta con... Precio, cantidad, subtotal, Iva, Total. En el evento Después de actualizar del cuadro de texto Cantidad crea un procedimiento de evento y entre Private Sub y End sub puedes poner

Subtotal=precio*cantidad

Iva=precio*cantidad*0.21

Total=subtotal+iva

Así, cuando pongas una cantidad, te hará esos cálculos poniendo sus valores en los respectivos cuadros de texto. Que le cambias la cantidad, pues te "rehace" los cálculos.

Hola Icue. Los controles calculados en el mismo registro no hay problema. Se actualizan en seguida que haces intro en cualquier campo pero, los controles calculados tipo suma de todos los registros es cuando no se actualiza hasta guardas el registro en edición, cambiando de registro o clicando en el selector de registros.

Antonio me ha dado la idea y aunque no parece muy ortodoxo, con el comando GotoRecord adelante y luego hacia atrás lo obligas a cambiar de registro y por ende a salvarlo y no se si creará algún problema pero hace lo que quiero.

Gracias a los dos.

En fin, si es eso lo que quieres, pero eso de ir adelante o atrás...

Supongamos que en el pie o el encabezado del formulario tienes un cuadro de texto llamado Total y quieres que en él te aparezca, por ejemplo, la suma de los subtotales del subformulario. En el mencionado evento después de actualizar del cuadro de texto cantidad puedes poner la instrucción anterior y completarla con

Docmd. Runcommand accmdsaverecord

me!parent!total=dsum("subtotal","detalleventa","idventa=" & me.idventa & "")

Así, cuando escribas una cantidad, te hará los cálculos, te guardará el registro y en el cuadro de texto Total del formulario te irá poniendo la suma acumulada de los subtotales del subformulario.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas