Actualizar campo sumando 1 al introducir nuevo registro

Tengo una tabla en la que indico diferentes IPCs previstos a lo largo de los años. Quisiera que el año se actualizase, sumando 1 al año anterior, cada vez que se introduzca un nuevo registro. He intentado hacerlo con la función update, pero no lo consigo. Sé que access es capaz de hacerlo, pero lamentablemente, yo no sé cómo indicárselo. ¿Me pueden ayudar.

1 respuesta

Respuesta
1

No explicas mucho el funcionamiento de tu BD, por lo que no te puedo dar una respuesta 1005 exacta. Pero si miras en la web de Neckkito, verás un ejemplo "Autonumérico Manual" que te puede orientar.

La idea es que busques el último valor del año (con la función DLast si los registros los tienes ordenados o DMax) y le sumes 1.

E cuanto a donde colocar el código, podrías hacerlo en un botón que uses para añadir un nuevo registro, en el evento "Al activar registro" de tu formulario, previa comprobación de si se trata de un nuevo registro. Esto último lo harías con este bloque if..end if:

If Me.NewRecord Then

'Aquí el código

End If

¡Gracias! Lo pruebo y te comento si me funciona.

He probado el código que me has dado y funciona perfectamente. El problema que tengo es que se trata de un subformulario y sólo funciona cuando lo pruebo en el subformulario directamente. Desde el formulario principal no lo hace. ¿Sabes el motivo?

Si el código lo tienes en el formulario principal, para hacer referencia a un control del subformulario, tienes que usar la sintaxis: Me. NombreSubformulario.Form. NombreControl

Si el código lo tienes en el subformulario, para hacer referencia a un control del formulario principal, has de usar esta otra: Me. Parent. NombreControl

Así, sin ver tu BD, poco más te puedo decir.

El formulario principal es el que controla las diferentes plantas y dentro de ese formulario tengo un subformulario en el que quiero especificar los IPCs previstos para los años futuros. En ese subformulario se especifica el año y la tasa de IPC. La idea es no teclear el año siguiente en el subformulario y que, al introducir un nuevo IPC, el año se incremente en 1 automáticamente. No sé si me he explicado bien ahora.

¿Cuál es el código que tienes? ¿Y dónde lo tienes (formulario o subformulario)?

El código es un campo llamado año,está en el subformulario,y es el que quiero actualizar automáticamente sumando 1 al añadir un registro nuevo.

Pero ponme aquí el código que no te funciona, y dime qué error te da (número y descripción)..

El lunes te lo mando, lo tengo en el ordenador del trabajo,ok?

OK

Buenos días, siguiendo tu recomendación, busque en la web de Neckkito y he puesto el siguiente código:

Private Sub Form_Current()
If Me.NewRecord Then
Dim vAÑO, vUltimo As Variant
vAÑO = Me.AÑO.Value
If Not IsNull(vAÑO) Then Exit Sub
vUltimo = DMax("[AÑO]", "IPM-IPCs")
If IsNull(vUltimo) Then
vUltimo = 0
End If
vAÑO = vUltimo + 1
Me.AÑO.Value = vAÑO
End If
End Sub

Este código lo tengo al cargar el subformulario de IPCs que está vinculado con el formulario principal dependiendo de la planta que sea, es decir, que la planta se actualiza automáticamente al introducir un registro en el subformulario.

El formulario principal tiene la info general de cada planta y el subformulario tiene info sobre diferentes tipos de IC para cada año y para cada planta. La cuestión es que, si abro el subformulario de forma independiente, si agregar 1 al último año, aunque clar, no actualiza la planta porque no tiene el dato. Si lo abro incrustado en el formulario principal, al agregar un registro nuevo no hace nada.

No sé si esto te aclara mi problema.

Gracias por tu interés.

Pues la verdad, mucho no me aclara... pero te he creado un mini-ejemplo para que veas que sí funciona.

Lo que sí, en la función DMax, has de ponerle un criterio, para que te coja el último año de cada empresa (fíjate en mi ejemplo, en cómo hago para referirme al campo del formulario principal), pues de lo contrario, te cogerá el máximo de toda la tabla.

Hola, he visto tu ejemplo y sí, funciona perfectamente. Lamentablemente lo he traspasado a mi base de datos, cambiando los nombres de las tablas y campos, pero no funciona. La diferencia que he visto es que tú trabajas con IDs de número y yo con IDs de texto, igual por eso no funciona. Le seguiré dando vueltas porque veo que sí funciona. Muchas gracias por tu ayuda.

Si tu ID es numérico tienes que pasarle el valor entre comillas simples. En mi ejemplo, si ID fuera de tipo texto, serías así:

vUltimo = DMax("[Año]", "TSubDatos", "Empresa='" & Me.Parent.ID & "'")

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas