FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Duda existencial
Hola gente del foro, tengo un problema que necesito resolver y no se me ocurre como, como soy nuevo en Delphi quizas no sea tan complicado pero a mi se me escapa. Les voy a agradecer cualquier idea que me puedan tirar para solucionarlo.
Estoy haciendo un programa que sirve basicamente para dar turnos en un consultorio. Actualmente tengo en una ventana un calendario en donde al ir haciendo clic sobre las fechas y seleccionando previamente el medico me muestra en una tabla que turnos hay tomados. El problema esta en que ahora me piden que no aparezcan solamente los que estan tomados sino todos los que hay en el dia para que puedan ver a simple vista cuales quedan sin tomar. Es decir ahora figura la hora y el nombre del paciente pero si esta tomado el turno, sino el horario libre no se muestra. Como puedo hacer!!! Mil gracias!!! |
#2
|
|||
|
|||
duda existencial
no dás información de que base de datos utilizas (paradox,interbase,firebird..), pero se me ocurre que la solución podría pasar por crear un algoritme que calcule las horas 'libres'. Partiendo de la base de que tienes un horario de trabajo, por ejemplo para simplificar de 9 a 14 horas, podrías crear un algoritmo que 'calculara' las horas libres simplemente comprobando los periodos 'libres' antes y después de las horas ocupadas. Simplemente tendrias que chequear que dicho periodo entre una consulta y otra fuese de un periodo mínimo que podría ser por ejemplo de 30 minutos.
Espero haberte ayudado, saludos... |
#3
|
|||
|
|||
Gracias Levanteelx por tu respuesta. Uso tabalas Paradox. La duda es como haría eso. Necesitaría que me quede de la sgte manera
8 hs ---- Libre 8:30 hs ----- Nombre del paciente 9 hs ----- Libre . . . . Hasta ahora lo que me muestra es solamente por ejemplo el turno de las 8:30 que esta asignado pero no los otros. |
#4
|
||||
|
||||
No se como tienes organizadas las tablas, pero podrías rellenar todos los turnos para un día y mostrarlos.
Cuando alguien quiere un turno, en vez de insertar un registro, modificas el que corresponda con el día, la hora y el medico. Para que la tabla no crezca muchísimo, puedes generar a principio de año todos los días y turnos para el año y a medida que va pasando el tiempo, puedes ir borrando los turnos que quedaron vacíos del útlimo mes. |
#5
|
|||
|
|||
Duda existencial
como bien dice el compañero duidisola, no defines como tienes organizada la base de datos, pero bueno, me he creado un pequeño proyecto con una base de datos para simular como se podría hacer:
Parto de la base de que tenemos una base de datos a la que aquí llamo tconsultas, con dos campos que forman la tabla principal, dia + Hora, que definen las consultas confirmadas. Este es el código, por supuesto es bastante mejorable , pero bueno , funcionar ,funciona.. Código:
unit foro2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, DB, DBTables, Buttons, Mask; type TForm3 = class(TForm) BitBtn1: TBitBtn; Tconsultas: TTable; ListBox1: TListBox; TconsultasFecha: TDateField; TconsultasHora: TTimeField; TconsultasPaciente: TStringField; edfecha: TMaskEdit; procedure BitBtn1Click(Sender: TObject); private function formateahora(Segundos: Integer): String; function conviertehora( nhora:integer ):ttime; { Private declarations } public { Public declarations } end; var Form3: TForm3; const n_consulta = 30; // duración de las consultas (en minutos) h_comienzo_jornada = 8; // hora de comienzo de la jornada laboral h_fin_jornada = 14; // hora de finalización de la jornada laboral implementation {$R *.dfm} procedure TForm3.BitBtn1Click(Sender: TObject); var hora_control : integer; begin tconsultas.open; // nos posicionamos en el dia a visualizar hora_control := h_comienzo_jornada*60*60; // en segundos // controlamos que la última visita sea la de fin_jornada - minutos última // visita while (Hora_control <= ( (h_fin_jornada*60*60)-(n_consulta*60)) ) do begin // buscamos en la base de datos si la hora (hora_control) está libre. if tconsultas.findkey( [strtodate( edfecha.text), conviertehora(hora_control)] ) then listbox1.items.add( formateahora( hora_control) +' --- si que tiene visita '+tconsultaspaciente.value ) else listbox1.items.add( formateahora( hora_control )+' --- libre '); // sumamos a la hora de control los minutos transcurridos. hora_control := hora_control + ( n_consulta * 60 ); end; end; function tform3.formateahora(Segundos: Integer): String; var horas, minutos: Integer; dhora : tdatetime; begin horas := Segundos div 3600; minutos := Segundos div 60 mod 60; dhora := encodetime( horas,minutos,0,0); Result:= formatdatetime('hh:mm', dhora ); end; // function tform3.conviertehora( nhora:integer ):ttime; begin result := strtotime( formateahora(nhora) ); end; end. Espero te pueda aportar un poco de luz este código a tu problema, saludos... |
#6
|
|||
|
|||
Muchisimas pero muchisimas gracias a todos. Voy a probar esto que me dicen y les cuento.
|
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Ayuda con duda existencial | poliburro | La Taberna | 19 | 30-07-2007 09:30:39 |
duda con BDE | ercrizeporta | Conexión con bases de datos | 3 | 29-05-2007 12:20:46 |
Duda existencial | MaMu | OOP | 3 | 27-09-2006 15:37:40 |
duda existencial | nightynvid | La Taberna | 2 | 05-09-2006 14:12:20 |
Duda Existencial (datamodule) | vipernet | Conexión con bases de datos | 5 | 08-06-2006 20:15:30 |
|