Incremento de un campo numérico dependiendo de otro campo

Tengo una tabla que se llama MAYORES y recoge el numero de las certificaciones de cada obra, en dicha tabla aparece la fecha de inicio y fin de la certificación y esta es igual para todas las obras, lo que cambia es el numero de la certificación de cada obra dependiendo la fecha en la que se inicio, y la pregunta es si es posible que al añadir a la tabla las lineas de la nueva certificación el campo CERT se actualice autoincementadose automáticamente dependiendo de la obra, adjunto un ejemplo en el que el resultado deseado seria:

CERT         OBRA

8                  0085

10                0015

6                  0023

2 respuestas

Respuesta
2

Directamente en la tabla, si usas una versión de Access 2010 o superior lo puedes conseguir usando las "macros de datos". Tendrías que añadir la macro "antes del cambio" y dentro de ella, la acción "EstablecerValor". Ahí escoges el nombre del campo (CERT) y en Valor, usas DMax() o DCont() para obtener el último valor y le sumas 1, algo así:

DMax("CERT";"MAYORES";"OBRA='" & [OBRA] & "'")+1

(La macro te la pongo "de cabeza" que en estos momentos no dispongo de una versión de Access que me permita comprobarlo)

Si lo haces desde un formulario, es "más sencillo", tan solo debes programar el evento "después de actualizar" del campo OBRA con este código:

Private Sub OBRA_AfterUpdate()

If Nz(Me.OBRA,"")<>"" Then Me.CERT=DMax("CERT","MAYORES","OBRA='" & Me.OBRA & "'")+1

End Sub

He supuesto que OBRA es un campo de tipo texto (así definido en la tabla) si fuera numérico, sobrarían las comillas simples:

En la macro: DMax("CERT";"MAYORES";"OBRA=" & [OBRA])+1

En el código: Me.CERT=DMax("CERT","MAYORES","OBRA=" & Me.OBRA )+1

Un saludo.


Respuesta
2

Te aconsejaría que la tabla, ya que Mes depende de FI y Cert depende de la obra, la pusieras como

Luego puedes hacer un formulario (da igual único o continuo, pero éste último se ve mejor)

Sustituyo el cuadro de texto Obra por un combinado(luego te hablo de él), de forma que en el primer registro tendré que poner el número de obra, y en cuanto lo pongo

Y en cuanto pongo la fecha de FI

Si me voy al siguiente registro ya no tengo que escribir nada, basta con "abrir" el combinado

Ya me ha puesto el nuevo CERT. Al escribir FI, se repite lo mismo.

Si ahora "escribo" por primera vez otra obra

A esta le pone el cert que le corresponde

-Combinado. En el origen de la fila del combinado le pongo

SELECT Obras.Obra FROM Obras GROUP BY Obras.Obra;

Por último, el código del formulario es

Private Sub FI_AfterUpdate()
Mes = Format([FI], "mmmm/yyyy")
End Sub
Private Sub Obra_AfterUpdate()
Cert = Nz(DCount("*", "obras", "obra='" & Me.Obra & "'")) + 1
DoCmd.RunCommand acCmdSaveRecord
End Sub

Te quedaría

¡Gracias! de nuevo muchas gracias Icue, pero me viene mejor el otro ejemplo, por que cuando agrego un mes  con una sola consulta de datos anexados me agrega todas las obras abiertas con sus fechas y luego hago la actualización de la certificación, todo mediante código.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas