Conultar último registro de una tabla

Me gustaria que en el caso que dos campos no se hayan rellenado en un formulario y éste se haya cerrado, al abrir me salga el último registro. En el caso que se hayan rellenado los dos, que al abrirse vaya a un nuevo registro. Los campos serian "Horafin" y "Horainicio". De esta forma quiero asegurarme que estos dos camppos siempre se rellenen.

3 respuestas

Respuesta
2

Albert:Esta pregunta me sale sugerida y antes de descartarla prefiero comentarte>>

Con la Metodología de sondear si hay nulo en HoraInicio u HoraFin que vaya al último, no vas a controlar los nulos, porque si vas añadiendo registros y dejas los dos campos nulos o uno de ellos, solo vas a soluciona el último, pero no los otros.

Poco más te puedo orientar porque ignoro el resto de datos de entrada.

Solo comentarte que puedes obligar su llenado por Propiedades del Campo en la Tabla o por código.

Pero imaginando por imaginar algo, si el Campo de HoraFin puede y debe quedar vacío cuando se informa de HoraInicio, y el Campo HoraFin solo se pueda informar cuando haya una información previa de una persona en HoraInicio, ya es otro tema.

Lo de ir al último o a un Nuevo registro es lo más simple una vez has establecido las condiciones.

Un saludo >> Jacinto

Respuesta
2

Lo más sencillo sería poner los campos como requeridos, con lo cual los rellenas sí o sí. Pero si es tu gusto, si tengo la tabla

En el formulario, en el evento Al cargar le pongo

Private Sub Form_Load()
If IsNull(DLast("horainicio", "tabla1")) Or IsNull(DLast("horafin", "tabla1")) Then
MsgBox "Como no has rellenado algo, te jo..", vbOKOnly, "Otra vez será"
Me.RecordSource = "select * from tabla1 where horainicio is null or horafin is null"
Else
DoCmd.GoToRecord , , acNewRec
End If
End Sub

Cuando lo voy a abrir

Acepto y

Por el contrario, si el último está completo

Al abrirlo

Se va a un registro nuevo. Pero me parece algo rebuscado.

Respuesta
2

Si lo que pretendes es tener un registro de entradas/salidas de personal, o de actividad de inicio/parada de máquinas, actividades... poner los dos campos (horainicio y horafin) como requeridos puede no ser una opción válida, pensando en que registras uno al empezar la jornada/actividad... y el otro al finalizarla, y no vas a tener el formulario abierto en ese registro todo el tiempo entre las dos horas.

Yo usaría funciones agregadas de dominio para comprobarlo y actuar en consecuencia. Como desconozco como es tu BD, y para lo que lo quieres, te planteo como ejemplo un registro de entrada/salida de personal muy sencillo:

1º/ Una tabla con los campos ID, Empleado, Fecha, HoraInicio y HoraFin

2º/ Un formulario de Inicio en el que seleccionas el trabajador en un cuadro combinado y al pulsar en un botón vas al formulario para registrar las entradas y salidas de ese trabajador. El código del botón sería:

 DoCmd.OpenForm "FDatos", , , "Empleado='" & Me.cboEmpleado & "'", , , Me.cboEmpleado

3º/ En el Formulario de registro horario, en el evento "Al abrir" (o "Al cargar"), pondría:

Dim laFecha As Date
laFecha = DLast("Fecha", "TDatos", "Empleado='" & Me.OpenArgs & "'")
If IsNull(DLookup("HoraFin", "TDatos", "Fecha=#" & Format(laFecha, "mm/dd/yyyy") & "#")) Then
   DoCmd.GoToRecord , , acLast
Else
   DoCmd.GoToRecord , , acNewRec
   Me.Empleado=Me.OpenArgs
   Me.Fecha=Date
End If

Si selecciono a María, me va a un registro nuevo y me rellena ya su nombre y la fecha actual:

Si selecciono a Juan, me lleva al último registro para ponerle la hora de salida:

Te dejo aquí el enlace a la BD, para que trastees con ella: http://www.filebig.net/files/ApCMRaK34J

Un saludo.


Añade tu respuesta

Haz clic para o

Más respuestas relacionadas