Asignar nº de orden a una tabla con la resta de dos fechas, fecha de alta y fecha hoy.

Me gustaría si es posible, me den norte a este cuestión que tengo. Tengo una base de datos creada con un número de personas en la que tiene el campo fecha ingreso y he creado una operación, que me devuelve un número de años inscrito. Esto genera un orden de antiguedad y me interesaría que este orden se pudiese numerar es decir me coloque en un campo concreto el 1, el 2, el 3...

2 Respuestas

Respuesta
1

Otra posibilidad, ya que no dices como calculas la antigüedad. Vamos a suponer que tengo una tabla Copia y con ella hago un formulario continuo

Como puedes ver la antigüedad no está en orden. Creo una tabla llamada Aux exactamente igual a Copia donde el campo Idpedido es numérico. Al pulsar el botón, lo primero que hace es ordenar los registros por antigüedad

Y después los guarda ordenados en la tabla Aux

Supongamos que se anota un nuevo destinatario con una fechapedido la que sea, en el caso de la imagen Pepe Lopez

Cuando pulso el botón, me los vuelve a "reordenar"

El código del evento Al hacer clic del botón es

Private Sub Comando7_Click()
Me.RecordSource = "select * from copia order by antiguedad"
DoCmd.RunSQL "delete * from aux"
DoCmd.GoToRecord , , acFirst
Dim i As Byte
For i = 1 To Me.Recordset.RecordCount
DoCmd.RunSQL "insert into aux(idpedido,fechapedido,destinatario,antiguedad)values(" & Me.CurrentRecord & ", fechapedido, destinatario, antiguedad)"
DoCmd.GoToRecord , , acNext
Next
End Sub

Se podría hacer con sólo una tabla, pero te complicaría mucho más el código.

Pero como te ha dado el resultado de Pepe Lopez un 4 de antiguedad?

Haber, yo tengo un campo que es alta en la asociación y otro que me da el resultado en años al restar fecha de hoy con el de alta en la asociación. Lo que solicito es que me indique en el campo antigüedad el número que le corresponde.

gracias

Ningún ordenador del mundo trabaja con fechas. Trabaja con números, al día 01/01/1900 se le asignó el 1, al 02/01/1900 el 2 y así hasta hoy. Cuando tu ves un campo Fecha corta tipo 03/09/2019 es porque Access ha hecho cálculos y te lo presenta de esa forma. Por ejemplo, si escribes la fecha de hoy 03/09/2019 realmente estás escribiendo 43711. Las horas, minutos y segundos son decimales de día.

Por eso para calcular antiguedad en años puede usar varías fórmulas, por ejemplo

Antiguedad=Fix((date()-fechaingreso)/365.24)

ó

Antiguedad=Int((date()-fechaingreso)/365.24)

Es decir que la antiguedad en años es igual a la parte entera de la diferencia en días entre esas dos fechas dividido por los días "medios" que tiene un año.

Con lo que en caso de un que pongas un registro nuevo en la tabla a través de un formulario de ingreso, en el evento Después de actualizar del cuadro de texto Fecha Ingreso, crea un procedimiento de evento y entre Private Sub y End sub pones la instrucción de arriba.

Si la antiguedad la quisieras con años, mese y días, habría que hacer cálculos.

De todas formas, si quieres, repito, si quieres, mándame un mensaje(sólo el mensaje) a [email protected] y te mando un par de ejemplos. Si lo haces, en el asunto del mensaje pon tu alias José Barrios, ya que si no sé quien me escribe ni los abro.

José Barrios

Buenos días.

A mi no me funciona, Si eres tan amable, pon algún ejemplo para aclarar un poco.

Gracias

Pues puedes ver que funciona, y que da igual que el formulario sea único o continuo. Yo puse el ejemplo como continuo porque se ve mejor.

José Barrios

Al parecer no se lo que es un formulario continuo, puesto que a mi no me funciona.

Como su nombre indica formulario único es el que muestra un único registro de cada vez, el registro activo.

Y formulario continuo es el que muestra varios registros ( aunque sólo tenga existencia física el registro activo, los demás son imágenes virtuales, que sólo tendrán existencia física cuando se conviertan en activos).

Pero las instrucciones de desplazarse, mostrar, etc son exactamente igual para ambos.

Respuesta

Solo tienes que crear un campo en la tabla que sea autonumeroco, y cada vez que creas un registro le va asignando el siguiente número automáticamente.

gracias Jesús, pero no es lo que necesito. yo resto hoy() y la fecha de ingreso y me da. por ejemplo 35,8 años, 34,10 año, 33,50 años, así sucesivamente todos los socios. ahora me tiene que añadir al campo  orden, que el 35,8 es el 1, el 34,10 es el 2 y el 33,50 es el 3.

Saludos 

Creo que lo que dices no tiene mucho sentido, porque hoy tienes una cifra y mañana ha cambiado esa cifra y cada día que pasa va cambiando.

Si lo que quieres es asignar un número correlativo en el mismo orden de fecha de ingreso, solo tienes que ordenar la tabla por dicha fecha, pero si añades nuevos registros con fechas intermedias tendrás que volver a ordenar la tabla y los números correlativos se asignarán nuevamente.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas