none
FECHA MAS RECIENTE RRS feed

  • Pregunta

  • Buenos días, tengo una base de tados  de acces con varios campos de fecha me gustaría hacer un campo calculado que me devolviera la fecha mas reciente de entre los otros campos. este seria un ejemplo de lo que quiero conseguir (en realidad la tabla tiene unos 10 campos de fecha pero el ejemplo es para hacerse una idea)

    fecha 1 fecha 2 fecha 3 fecha calculada
    01/01/2010 02/01/2010 03/01/2010 03/01/2010
    01/01/2013 04/01/2010 03/01/2010 04/01/2010
    05/01/2010 01/01/2010 03/01/2010 05/01/2010

    gracias de antemano


    • Editado podenco33 miércoles, 10 de febrero de 2016 10:24
    miércoles, 10 de febrero de 2016 10:24

Todas las respuestas

  • Hola

    Se me ocurre que puedes usar la función DMax para calcular la fecha máxima de cada campo, e insertar el valor en una tabla temporal con dos campos, el valor y de que campo procede. A continuación puedes volver a usar DMax para calcular la fecha máxima guardada y recuperar el nombre del campo.

    Te lo digo así rápido, sín haber hecho ninguna prueba, pero ahí tienes un punto de partida.

    Suerte,


    José Mª Fueyo [MS MVP Access]

    miércoles, 10 de febrero de 2016 13:58
  • Muchas gracias José, no se si me explique bien, no necesito el valor máximo de cada campo, sino el valor máximo de entre los distintos campos de un registro, por ejemplo supongamos que cada campo es una tarea distinta y lo relleno con la fecha de cuando la realiza, lo que pretendo obtener es un campo que me diga cual es la fecha mas reciente en la que hizo una tarea.

    yo he estado haciendo pruebas con dmax y con Iif pero no me han dado resultado, sé que es algo que en Excel seria bastante simple pero no encuentro la forma de hacerlo en acces.

    miércoles, 10 de febrero de 2016 14:59
  • Hola de nuevo

    Quizás esto te pueda ayudar, entonces. Creas una función a la que le pasas como parámetros los campos de fecha (como tipo fecha). Internamente creas un array, y utilizas alguno de los múltiples métodos que puedes encontrar para ordenar ése array. Luego recuperas el último elemento del array y lo devuelves como resultado de la función.

    Esta función la puedes usar en una consulta como un campo calculado.

    http://stackoverflow.com/questions/20721489/how-can-i-sort-dates-in-an-array-in-vba

    Salu2,


    José Mª Fueyo [MS MVP Access]

    jueves, 11 de febrero de 2016 10:26
  • Hola A tod@s,

    Mira Podenco33 te pego un procedimiento que hace lo que tu quieres. Yo parto que los datos estan en una tabla llamada 'tabla1' que tiene un primer campo [id] (solo para el msgbox)y el primer campo fecha a evaluar tiene el nombre 'fecha1' (Mirando de izq a dcha), que es el que sirve de referencia en cada registro para la comparacion con el resto de campos de tipo fecha que hay en el registro. Evalua si el dato es fecha sino no lo evalua. Ahora adecualo a lo que necesites.Espero te sirva.

    Sub CalculoFechaMasAlta()
       Dim cadena As String, RecReg As DAO.Recordset, x As Integer, fechaCalculada As Date
       cadena = "Select * From tabla1"
       Set RecReg = CurrentDb.OpenRecordset(cadena)
       With RecReg
          .MoveLast: .MoveFirst
          Do While Not .EOF
             fechaCalculada = ![fecha1]
             For x = 0 To RecReg.Fields.Count - 1
                If IsDate(.Fields(x)) Then If fechaCalculada < .Fields(x) Then fechaCalculada = .Fields(x)
             Next x
             MsgBox "Registro " & ![Id] & " con fecha mas alta " & fechaCalculada
             .MoveNext
          Loop
       End With
       RecReg.Close: Set RecReg = Nothing

    End Sub
    • Propuesto como respuesta ikanni1 martes, 29 de marzo de 2016 8:05
    • Editado ikanni1 sábado, 2 de abril de 2016 8:53
    domingo, 20 de marzo de 2016 9:26