Validar fecha y hora

Muy buenas, tengo una tabla agenda, con los campos: id, nombre, fechacita, hora, ttos (tratamientos) y otros, y quiero que en el formulario cuando meta la fechacita y la hora me diga si esta ocupada, si no lo esta, seguir metiendo datos.

1 Respuesta

Respuesta
1
Control Calendario que llamamos selFecha (En el formulario, en la acción Al cargar pones Form!selFecha.Value=Date()), esto es para que cuando abras el formulario el calendario, por defecto se posicione en la fecha del día. El control calendario lo obtienes picando en el cuadro Más Controles.
Un cuadro de texto que llamamos txtHora
En las propiedades de este cuadro de texto, en la acción Al perder el enfoque ---> Procedimiento de evento:
Dim db As Database
Dim rs As Recordset
Me.Refresh
Set db = CurrentDb
Set rs = db.OpenRecordset("Select FechaCita, Hora from Agenda where Fechacita=cDate('" & Form!selFecha.Value & "') and Hora=cDate('" & Form!txtHora.Value & "')")
If Not rs.EOF Then
        MsgBox "Fecha y hora ocupadas"    
End If
Hola Angeles,
lo primero que me dijiste sobre "Al cargar" que saliese la fecha de hoy no me interesa, porque si hay algún dato guardado me lo cambia automáticamente.
He puesto esto en el campo txthora:
Private Sub txthora_LostFocus()
Dim db As Database
Dim rs As Recordset
Me.Refresh
Set db = CurrentDb
Set rs = db.OpenRecordset("Select Fecha, Hora from Agenda where Fecha=cDate('" & Form!selfecha.Value & "') and Hora=cDate('" & Form!txthora.Value & "')")
If Not rs.EOF Then
        MsgBox "Fecha y hora ocupadas"
End If
End Sub

Pero cada vez que meto una hora me dice "Fecha y hora ocupadas", y me sigue dejando meter datos. El nombre del campo fechacita era finalmente fecha. ¿Por qué puede pasar este error?
Muchas gracias.
Un formulario independiente (no pones nada en origen del registro, el control calendario selFecha y el cuadro de texto txtHora, el código sería:
Private Sub txtHora_LostFocus()
Dim db As Database
Dim rs As Recordset
Me.Refresh
Set db = CurrentDb
Set rs = db.OpenRecordset("Select Fecha, Hora from Agenda where Fecha=cDate('" & Form!selFecha.Value & "') and Hora=cDate('" & Form!txtHora.Value & "')")
If Not rs.EOF Then
        MsgBox "Fecha y hora ocupadas"
Else
    DoCmd.RunSQL "Insert Into Agenda (Fecha, Hora) Values (cDate('" & Form!selFecha.Value & "'), cDate('" & Form!txtHora.Value & "'))"
End If
End Sub
Me cuentas.
Gracias por contestar tan rápido. Ahora tengo otro problema, yo es que tengo un formulario con todos los datos de la tabla agenda: id, nombre, fecha, hora, ttos y otros, y ahora cuando guardo los datos solo se guarda fecha y hora, pero los demás se quedan en blanco.
Perdón por tantos problemillas.
Un saludo y gracias.
Es porque te puse la sql Insert Into para estos 2 campos, tendrás que ampliarla para los demás:
en una sql Insert Into nombredelatablaalaquequieresagregar (camposdeesatablaseparadosporcomas) values (valoresquequieresagregarseparadosporcomas)
Supongamos que el nombre está en el cuadro de texto txtNombre
Ttos ---> txtttos
Sería:
DoCmd.RunSQL "Insert Into Agenda (Fecha, Hora, Nombre, ttos) Values (cDate('" & Form!selFecha.Value & "'), cDate('" & Form!txtHora.Value & "'), '" & Form!txtNombre.Value & "', '" & Form!txtttos.Value & "')"
Lo que tienes que tener en cuanta es que si el campo de la tabla es de texto el valor lo tienes que poner entre comillas simples:
'" & Form!txtNombre.Value & "'
Si fueses numérico, quitas las comillas dobles (supone que tienes un campo cantidad en un cuadro de texto txtCant:
" & Form!txtCantidad.Value & "
Y si son de fecha, como el cuadro de texto siempre te devuelve un string, tendrás que pasar ese string a fecha:
cDate('" & Form!txtHora.Value & "')

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas