Crear agenda de citas para pacientes con access

Respuesta de
Usuario
Hola
Tengo una base de datos para pacientes, y está casi todo creado, pero no consigo dar con la fórmula perfecta para diseñar una agenda de citas.
Me gustaría que se pudiera ver a golpe de vista las citas diarias seleccionando el día, con algo así como un control calendar (que se utilizase para buscar en lugar de para introducir el dato)
La mayor complicación, a parte de que haya que hacerlo en Visual B (de lo cual no entiendo mucho) es que quiero que las citas se puedan dar a pacientes metidos en la base de datos, esto es, que cuando ocupe una hora, sea con un nombre recuperado de otra tabla, y no un nombre que se escriba directamente, para que luego pueda quedar guardado un historial de las citas de cada paciente en su historia. Y también sería necesario poder seleccionar los turnos de cada profesional y completar la agenda en función de estos turnos.
¿Alguien podría enseñarme algún ejemplo o sugerirme alguna forma de diseñarlo? Se que es una pregunta algo abierta, pero necesito un modelo, o punto de partida para poder diseñarlo, porque me faltan nociones e imaginación, y me atasqué en esta parte de la base.
Muchísimas gracias de antemano
 
Experto
Hola,
Yo lo haría utilizando cuatro tablas. Una la de los pacientes, donde guardas el nombre de estos y sus datos y un código único que los identifique. Lo mismo para los profesionales. Después una tabla (por ejemplo, Calendario) donde guardes los días laborables donde se pueden asignar citas. La última tabla será la que relacione las tres anteriores. Además, de tener su propio IdCita (un autonumérico, por ejemplo), tendrá tres campos donde se guardará la información relativa a qué paciente, con qué profesional y en qué fecha. Esa información, a través de controles de Cuadro combinado, sólo podrá salir de los pacientes, profesionales y fechas que tengas almacenadas en cada una de las tablas anteriores.
Piénsalo un poco y si necesitas, más ideas sobre esto, pregúntame.
En cuanto al control, hace tiempo vi algo parecido hecho con cuadros de texto, pero con mucha carga de VB. A ver si lo encuentro y te pongo el link.
Usuario
Muchas gracias por tu respuesta.
La estructura de lo que tengo hecho es algo así. Creo que lo que no se implementar bien es el formulario donde se vea la agenda, porque no se casi nada de macros y no se me ocurre alguna forma creativa de reflejarlo. Vi un ejemplo para un hotel que me gustó, pero la agenda era complicadísima porque como dices tú, tenía mucha carga de VB y se escapaba a mi control.
Respecto a lo que sugieres, algo que no se me había ocurrido es la tabla CALENDARIO con los días laborables ¿Hay alguna forma de hacer esto de forma sencilla? Por que se me ocurre hacer una tabla para días y otra para horas, para que no se puedan seleccionar las horas que previamente se hayan bloqueado para cada profesional, o algo así...
¡Que complicado!
Muchísimas gracias por tu colaboración, no se que haría yo sin este foro!
Un saludo
Experto
Acess es sencillo... cuando haces cosas sencillas. Si quieres una herramienta que funcione no tienes más remedio que complicarte, con VB, o con estructuras complejas de consultas, eventos, macros, etc...
Respecto al calendario, una posible solución fácil sería que las citas siempre tegan una duración fija (es decir, siempre bloques de una hora, o de media hora, etc... Entonces de las cuatro tablas que te dije, no te hace falta la de relacionar entre ellos los datos, porque la propia tabla Calendario tendrá los datos de paciente y profesional. Podría tener los siguientes campos:
Fecha, HoraInicio (la hora de fin no hace falta), CodProfesional, CodPaciente, etc...
En ella tendrías que incluir todas la posibles fechas y horas de cita. Por ejemplo:
10/10/10 , 10:00, <vacio>, <vacio>
10/10/10 , 10:30, <vacio>, <vacio>
10/10/10 , 11:00, <vacio>, <vacio>
Después haces una consulta sobre esta tabla, de tipo Dynaset, pero que solo te muestre los datos en los que el campo CodProfesional este vacío. Sobre esta consulta es sobre la que harás el formulario para elegir cita (así, solo te mostrará las que están libres). En ese formulario, colocas dos Cuadros combinados, cada uno de ellos con origen en las tablas Profesional y Paciente. Y para reservar una cita, lo único que tienes que hacer es buscar el día, la hora, y colocar un profesional y un paciente.
Para esto último, te puede ser útil utilizar filtros (entre fechas y/o entre horas) para saber cuales tienes disponibles con las condiciones que te marca el paciente.
Dale una vuelta a esto, por ver si te sirve. Sin utilizar VB, es lo que se me ocurre.
Usuario
Muchísimas gracias! Una solución muy creativa sin necesidad de VB, voy a intentarlo y te cuento, a ver si me sale.
Solo una aclaración, ¿hay alguna forma de meter automáticamente todos los días laborables en una tabla sin tener que ir registro a registro tecleando? Por lo que me dices, me da que tengo que hacer un millón de registros en la tabla calendario... o eso, o no me entero bien :-)
Mil gracias de nuevo por tu atención, me estás siendo de gran ayuda
Un saludo
Experto
Te recomiendo hacerlo en Excel. Es lo más rápido.
Luego copias y pegas, y ya está.
Usuario
Lo último que te pregunto...
¿Hay alguna forma de buscar el día para dar la cita con un control calendar? Es decir, usar ese control para buscar, en vez de para insertar el día. Que por ejemplo, en un formulario esté ese control y seleccionando un día en el calendario, aparezca en un subformulario, los huecos libres en los que no haya citas.
Se que estoy siendo pesada, pero es que dais consejos muy útiles y ya lo tengo casi terminado"!
Muchas gracias de nuevo
Experto
Lo más sencillo para lo que dices es lo siguiente:
- Crea un formulario de la tabla de fechas y horas de cita
- En ese formulario, inserta un cuadro combinado. En el asistente tienes que poner que "Busque un registro en el formulario según..." y escoge el campo fecha.
- Al deplegar y elegir una de las fechas, te irá directamente al primer registro que contenga esa fecha.
- Si quieres hacerlo más elegante (porque esto no lo es mucho, la verdad), fíjate en las propiedades de ese cuadro combinado. Con el evento "Después de actualizar" ejecuta una macro que te lleva al registro. Si lo cambias a aun cuadro de texto, con formato fecha (para que te aparezca el calendario), tendrías que incluir una macro en un evento similar para conseguir algo parecido.
Prueba a ver y me dices.
Un saludo.
Experto
Hola.
Acuérdate de cerrarla, cuando puedas.
Gracias
Usuario
Hola! Intenté la solución que me diste pero no funciona correctamente con el cuadro de texto. Probé a hacerlo con un control de calendar (en lugar de con un cuadro de texto con calendario, directamente con el control calendar que te inserta un calendario)
Dejé el calendario como control independiente, y probé a meter el código que me dijiste (en la propiedad actualizar que es la única que permite), quedando algo así:
Private Sub Calendar4_Updated(Code As Integer)
    Dim rs As Object
    Set rs = Me.Recordset.Clone
    rs.FindFirst "[IdCita] = " & Str(Nz(Me![Calendar4], 0))
    If Not rs.EOF Then Me.Bookmark = rs.Bookmark
   
    End Sub
Imagino que esto no tiene sentido... Pero como no entiendo de VB, no se cómo modificarlo. Pensé en insertar un botón y que al hacer click, tras elegir un día en el control calendario, me llevase al registro seleccionado, pero tampoco se muy bien cómo.
¿Hay solución? Si no sabes cómo, lo dejo con el cuadro combinado y ya está, y cierro la pregunta.
Muchas gracias!
Experto
Hola,
Lo que te dije es que insertaras un cuadro combinado, no un cuadro de texto, que es distinto. Con el cuadro combinado sí que te salta un asistente. Pruébalo y si no buscamos otra cosa.