Restar varios minutos en access

Tengo 1 campo en una tabla tipo hora y estoy tratando de restar 15 minutos de la hora pero no genera ningún dato.

Campo de tabla: 21:45

Fórmula: AgregFecha("n";-15;[Formularios]![PESTAÑAS]![Texto106])

[Formularios]![PESTAÑAS]![Texto106])  :  22:00

Debería aparecer el registro de la tabla con los datos 21:45.

2 Respuestas

Respuesta

Pruebe con:

Format(#22:00# - #00:15#, "h:m") .... retorna 21:45

Como desconozco el nombre del campo en la tabla y el formato (hora corta,,, etc) le dejo la idea.

Respuesta

Lo tienes bien, lo único que se me ocurre es que no tengas puesto el formato de hora corta en los cuadros de texto. Si tengo un formulario con dos cuadros de texto y en uno de ellos escribo una hora

Puedes ver que el cursor aún está en Texto209. Cuando pulso Enter

Y el código es el que has puesto

Private Sub Texto209_AfterUpdate()
Texto211 = DateAdd("n", -15, Texto209)
End Sub

Hola Julián:

Gracias, todo se encuentra bien, con el formato que es pero como dije antes, funciona hasta cierto punto y después ya no funciona.  

Me sorprende, ya que si el código funciona en un registro, tiene que funcionar en todos.

¿Puedes poner una imagen de tu formulario?

Lo que yo pretendo es que llaman a hacer una reserva y debo verificar 15 minutos antes y 15 minutos después si hay o no alguna reserva hecha para así tener presente el aforo actual.

Gracias.

Las horas. Como las ves, o sea 07:45, 22:00 no existen, son decimales de día, por eso, aunque parezca mentira, lo importante es determinar si, por ejemplo, tu escribes 22:15, se cuenta o no el 22:00 y el 22:30 o sólo los que están en ese intervalo, o sea 22:01, 22 10, 22:29, o se cuenta uno y no otro, etc.

Mira, para demostrar las horas, supongamos que tengo unas reserva el día de hoy( no hagas caso al formulario, sería una tabla, pero aprovecho lo que tengo)

Puedes ver, que si no cuento las 22:00, si escribiera 22:15, habría 3 clientes con reserva 15 minutos antes de las 22:15 y 15 minutos después.

Si en un formulario cualquiera tengo un cuadro de texto llamado ParaReservar y escribo una hora, en este caso 22:15

Puedes ver que el cursor está todavía en él. Al pulsar Enter

Si le digo sí, me abre el formulario Reservas, en vista diálogo sólo con esos registros

El código del evento Después de actualizar del cuadro de texto ParaReservar del Formulario1 es

Private Sub ParaReservar_AfterUpdate()
Dim r As Byte, respuesta As Byte
r = Nz(DCount("*", "reservas", "horareserva >= DateAdd(""n"", -15, Parareservar) and horareserva<=DateAdd(""n"", 15, ParaReservar)"))
respuesta = MsgBox("A esa hora hay " & r & " cliente(s) que tienen reserva. ¿Quiere verlos?", vbYesNo, " Luego no me eches la culpa de la aglomeración")
If respuesta = vbYes Then
DoCmd.OpenForm "reservas", , , "horareserva>= DateAdd(""n"", -15, #" & Me.ParaReservar & "#) and horareserva<=DateAdd(""n"", 15, #" & Me.ParaReservar & "#)", acFormReadOnly, acDialog
ElseIf respuesta = vbNo Then
Exit Sub
End If
End Sub

Verás que no uso el between por lo que te decía en primer lugar. Si le pongo between, las horas extremas 22:00 y 22:30 no me las cuenta.( y el comensal todavía sigue ocupando la mesa, ¡que pesado, no hay forma de echarle !). Por eso debes decidir. Si no se cuenta usa el between si se cuentan usa el >= y el <=

Personalmente, el código se lo pondría en el evento Antes de actualizar del cuadro de texto ParaReservar, porque ¿para qué voy a escribir una hora que si hay mucha gente luego debo borrarla? También en el código le pondría como criterio el día de la reserva, pero al no saber como trabajas no digo nada.

¡Gracias!   Te agradezco por tú tiempo.  Voy a darle la vuelta en algunas cosas.

Nuevamente gracias.

Otra forma, aunque como te dije no sé como trabajas. Vamos a suponer que un día determinado a una hora determinada permites un aforo de cuatro reservas. Cuando vas anotando el día y la hora, antes de actualizar el control HoraReserva le puedes decir que cuente en la tabla cuantas hay ya para ese día y hora y que si ya hay cuatro te avise y no te deje asignar esa hora( también se le podría decir que sólo mostrara las horas que queden libres, etc, etc.

Hola, eso es precisamente lo que hago, el aforo máximo es de 20 personas, antes de actualizar la tabla me aparece en pantalla el aforo actual y si está por debajo y al sumar los que llegan no se pasa activa el botón de grabar, de lo contrario estará desactivado.

Es otra forma muy correcta de hacerlo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas