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
1
Anónimo
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 & "')