Como crear la regla de validación en access

Tendo una BD en access, en la cual el campo fecha esta restringido para que se agenden citas solo con 15 días de anticipación.

Hay tantos usuarios que agendan, que requiero restringir el día martes de cada semana para mi, es decir que si yo ingreso a la BD y tomo el martes me deje agendar, si ingresa otro usuario le restringa tomar ese día, es decir podrá agendar los demás días menos el martes.

actualmente para el campo fecha la regla de validacion la tengo asi: <=Fecha()+15

Texto de validación lo tengo así: "puedes Agendar tu espacio, máximo con 15 días de anticipación"

Adicional necesitaría bloquear el día martes de cada semana para mi, pero no he logrado encontrar la forma, no se mucho de VB.

1 Respuesta

Respuesta
1

Vamos a ver si consigo explicarme. Primero, no dices como determinas el cliente, las fechas, ni como están construidas las tablas y el formulario. Por eso, antes de suponer vamos a señalar unos casos que pueden darse

1º Que el "cliente" sólo quiera reservar una cita un día determinado.

2º Que ese día determinado sea martes

3º Que ese día determinado ya esté reservado por otro cliente

4º Que no se pueda reservar para el mismo día del sistema

Vamos ahora a suponer que quiere reservar un intervalo de días, por ejemplo 15/03/2020 al 22/03/2020

5º Si hay algún martes en medio no debe guardarlo

6º Si en ese intervalo de días hay alguno que ya está reservado, que lo avise y no lo guarde

No se me ocurren más.

Vamos ahora al trabajo.

Si tengo un formulario como el de la imagen

No haría falta el botón, pero me remito a lo dicho en las primeras líneas. Si pulso el botón

En caso de que hubieras puesto el mismo día del sistema te aparece un mensaje avisándote y no hace nada hasta que lo corrijas. Vamos a suponer que elijes un intervalo

Al pulsar

Con lo que la tabla Reservas te quedaría

Como puedes ver, el martes 10 no te lo guarda.

Vamos a suponer que llega María y quiere reservar el 12/03/2020, que puedes ver que ya está reservado por Pepe( y como somos unos machistas se lo asignamos a él)

Al pulsar

Me parece que no me deja poner más imágenes, así que continuo en la ampliación

Vamos a suponer que María(¿es qué no tiene otra cosa que hacer?) Elige un intervalo de días en los que hay algunos ya reservados

Recuerda que el 11, 12 y 13 ya están reservados por Pepe

Primero me aparece lo de los martes para recordármelo

y al Aceptar

Y así te lo va diciendo mientras "haya" días que ya están reservados, por lo que al final la pobvre María se queda con

El código del botón es

Private Sub Comando36_Click()
If IsNull([FechaFin]) Then
    If FechaInicio = Date Then
    MsgBox "No se puede reservar el mismo día", vbOKOnly, "¿Cuantas veces tengo que decirlo?"
    Exit Sub
    ElseIf FechaInicio > Date Then
        If DCount("*", "reservas", "fechareserva=forms!formulario1!fechainicio") >= 1 Then
        MsgBox "Imposible,Imposible, ese día ya está cogido", vbOKOnly + vbExclamation, "Tendrás que reservar otro"
        Exit Sub
        ElseIf Format([FechaInicio], "dddd") = "Martes" Then
        MsgBox "Imposible, los martes están reservados para Gloria", vbOKOnly, "Derberás seleccionar otro"
        Exit Sub
        Else
        DoCmd.RunSQL "insert into reservas (cliente,fechareserva)values(Cliente,fechainicio)"
        End If
    End If
Else
Dim c As Byte
MsgBox "Que sepas que los martes estan reservados para Gloria", vbOKOnly, "No digas que no te avisé"
For c = 1 To DateDiff("d", FechaInicio, FechaFin) + 1
        If DCount("*", "reservas", "fechareserva=forms!formulario1!fechainicio+" & c & "-1") >= 1 Then
        Dim d
        d = DateValue(Forms!formulario1!FechaInicio + c - 1)
        MsgBox "Imposible,Imposible, ese día " & d & " ya está cogido", vbOKOnly + vbExclamation, "Tendrás que reservar otro"
        Else
        DoCmd.RunSQL "insert into reservas (cliente,fechareserva)values(Cliente,fechainicio+" & c & "-1)"
        End If
Next
DoCmd.RunSQL "delete * from reservas where format([fechareserva],""dddd"")=""Martes"""
End If
End Sub

Parece liado, pero es por tener que cubrir todas las posibilidades y los mensajes de aviso.

Gracias por tu respuesta. Si se ve liado el tema.

Me explico mejor.

1. Tengo un formulario que cada usuario diligencia así: ejemplos

  • Usuario: María este campo no es modificable, lo trae directo una vez se identifica en la base.
  • Nombre del servicio: lavar el patio
  • fecha del servicio: 10.03.20
  • Equipo a usar: Lavadora
  • horario: 7.00 a 12.00 Nota: los horarios que se manejan esta descritos así y se despliega el listado con dos opciones 7.00 a 12 y 13.00 a 17

Lo que mencionas arriba, de la alerta notificando que el equipo esta ocupado en esa fecha y hora, ya lo tengo funcionando bien.

El dilema que tengo es, que tengo muchos usuarios, que ingresan al formulario para programar su turno, esta bien, pero hay algunos que se quedan sin días y horarios pues ya todo estaría reservado y les aparece el mensaje que esta ocupado tal equipo en tal fecha en tal hora. Esta bien.

Ahora, lo que quiero es dejar un día se me ocurre el martes, que si un usuario POR va a reservar ese día, genere la alerta y diga ejemplo "este día no se puede reservar, esta asignado para glori", y que cuando yo entre a la base, como me autentico con contraseña, si quiero reservar un espacio y quiero el martes me deje sin problema, obivio que si hay más horarios libres lo pueda hacer, pero en primera instancia ya sepa que el martes es mio. Se me ocurre así como para proteger al más débil por decirlo así, y todos tengan oportunidad de agendar.

Si fuese muy complicado lo anterior. Pues se me ocurre habilitar el botón que dice programación para que se pueda agendar solo los días miércoles por ejemplo desde las 8 am hasta las 5.00 pm, y así cada miércoles. Y como decimos acá, el primero que se arrodille se confiesa.

El menu principal consta de 3 botones y cada uno despliega un formulario, para el caso del botón de programación al dar click desplieqa el formulario que menciono líneas arriba para diligenciarlo y agendar. Seria solo hacer la validación de este botón y solo se active los días miércoles desde las 8 am hasta las 5.00, para que ingresen a agendar.

Agradezco su respuesta.

Pero lo importante es saber que define una reserva, por ejemplo:

1º Ana quiere reserva para un día y una hora, pero el servicio de Limpieza de patio ya está cogido. ¿Se anula la reserva? ¿Tiene qué elegir otro día? ¿Elige otro servicio? ¿Elige otra lavadora?

2º Ana quiere trabajar, pero que sea precisamente el 14/03/2020 de 13 a 17 horas. Si ya estuviera cogida ¿Se queda de brazos cruzados? ¿Elige otro día?

Supongamos que tengo una tabla Reservas con los mismos campos que ves en el formulario

También tengo una tabla Dias Libres donde se van a guardar los días y las horas(la primera vez, de los día que le quedan al mes en curso. Luego a cada día que pase ya le añadirá uno para compensar que el actual ha pasado). Cuando pulso el botón

Me ha creado dos turnos por día hasta que acabe el mes.

En el formulario de antes, llega Ana y elige un día

Y luego elige una hora

Y como todavía nadie eligió están los dos turnos libres.

Ahora viene Carlos y elige el mismo día, ya que hay un turno libre

Cuando vaya a elegir la hora, sólo le aparecerá la que está libre

Y la elige( o no, en este caso vamos a suponer que sí) Cuando llegue otro usuario a elegir día

Ya no le aparece el 14 porque ambos turnos están cogidos.

Le tengo puesto que si hubiera seleccionado un martes le diga que no puede que ya está reservado, pero también se le podría decir

A.- Que si el usuario no es Gloria, en el combinado no le muestre los martes

B.- Que no muestre los sábados y domingos( que son para descansar, se supone)

En el formulario, una vez que ya ha creado la tabla Dias libres, se le puede decir que ya no muestre el botón.

El código del formulario es

Private Sub Comando10_Click()
Dim i As Byte
For i = 1 To DateSerial(Year(Now()), Month(Now()) + 1, 0) - DateSerial(Year(Now()), Month(Now()), 1)
DoCmd. RunSQL "Insert into diaslibres(diaslibres, horaslibres)values(dateSerial(Year(Now()), Month(Now()), 1)+" & i & ",""7:00 a 12:00"")"
DoCmd. RunSQL "Insert into diaslibres(diaslibres, horaslibres)values(dateSerial(Year(Now()), Month(Now()), 1)+" & i & ",""13:00 a 17:00"")"
DoCmd.RunSQL "delete * from diaslibres where diaslibres<=Date()"
Next
End Sub
Private Sub FechaReserva_BeforeUpdate(Cancel As Integer)
If Format([FechaReserva], "dddd") = "Martes" And Usuario <> "Gloria" Then
MsgBox "No se puede reservar, es martes y es para Gloria", vbOKOnly, "Háblalo con ella"
End If
End Sub
Private Sub FechaReserva_GotFocus()
FechaReserva.Requery
End Sub
Private Sub HoraReserva_AfterUpdate()
DoCmd.RunSQL "delete * from diaslibres where diaslibres=forms!reservas!fechareserva and horaslibres=forms!reservas!horareserva"
End Sub
Private Sub HoraReserva_GotFocus()
HoraReserva.Requery
End Sub

Me gusta pero no me funciono, tome solo la parte del código:

Si entro al formulario y selecciono el 17 q es un martes, deja q otrousuario lo tome, en este caso maría.

¿Sera por el formato de día? Como se podría enlazar para q restrinja a otro usuario seleccionar el martes, q solo pueda tomarlo yo. Es decir puedo tomar cualquier día, pero con seguridad se q el martes es mio.

Agradezco su orientación

Private Sub Fechafabrica_BeforeUpdate(Cancel As Integer)
If Format([Fechafabrica], "dddd") = "Martes" And Usuario <> "Gloria" Then
MsgBox "No se puede reservar, es martes y es para Gloria", vbOKOnly, "Háblalo con ella"
End If
End Sub

No sé como lo habrás puesto. Mira la imagen. María intenta quitarte el día

Y cuando aceptas, el cursor se vuelve al control Fechareserva para que la cambies.

Pero también puedes ponerlo en el evento Después de actualizar del control FechaReserva como

Private Sub FechaReserva_AfterUpdate()
If Format([FechaReserva], "dddd") = "Martes" And Usuario <> "Gloria" Then
MsgBox "No se puede reservar, es martes y es para Gloria", vbOKOnly, "Háblalo con ella"
Usuario.SetFocus
FechaReserva = ""
End If
End Sub

En este caso, te saldría el mensaje y al Aceptar, el cursor se iría a Usuario y el control Fechareserva te lo deja vacío para que lo cambies.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas