Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Ayuda sobre manejo de fechas (https://www.clubdelphi.com/foros/showthread.php?t=76377)

francodelphi 26-10-2011 23:12:49

Ayuda sobre manejo de fechas
 
Hola gente! Como les va? Tengo una duda con manejos de fechas.
Estoy haciendo un sistema para la reserva de unas cabañas. El tema es que yo tengo que decir si una cabaña esta ocupada o libre , voy a tener dos fechas , fecha desde y fecha hasta , quiero saber como hacer que por ejemplo si un cliente viene y me dice que quiere una cabaña desde tal fecha hasta tal fecha que el sistema me diga si la fecha que selecciono el cliente esta ocupada o libre . Desde ya muchas gracias , necesito saber porque estoy al horno jaja. Un abrazo!

oscarac 26-10-2011 23:16:52

tienes las estructuras de las tablas?
algun codigo que hayas avanzado?

oscarac 26-10-2011 23:21:00

aunque se me ocurre que en una tabla coloques por ejemplo lo siguiente

si reservas una cabaña del 15/10 al 18/10

Cita:

Cabaña.... fecha
01.......15/10/2011
01.......16/10/2011
01.......17/10/2011
01.......18/10/2011
entonces si por ejemplo alguien viene a separar esa misma cabaña el dia 16, tu podrias buscar en esa tabla si el dia esta libre o no... si el registro existe entonces no esta libre

se entendio?

francodelphi 26-10-2011 23:21:23

No no tengo nada , lo tengo que empezar . Tengo que usar la tabla reservas (id_cab,id_cli,res_fdesde,res_fhasta,res_fecha,res_importe,res_obse,res_agente) cuando hago una reserva tengo que guardar en esta tabla el id del cliente (id_cli) y los demas datos.

francodelphi 26-10-2011 23:23:08

si entiendo pero cuando yo hago eso que vos hiciste , el sistema me tiene que tirar solo si la cabaña esta ocupada o libre , entendes?

oscarac 26-10-2011 23:29:52

mmmm
podrias ir buscando las fechas en la tabla que te dije

siguiendo el mismo ejemplo
si reservas una cabaña del 15/10 al 18/10

y viene otra persona y quiere reservar del 17 al 21

el modulo podria buscar desde el dia 17 al 21 en la tabla que te dije
y mostraria algo asi

Cita:

cabaña 01
Dia 17/10 ocupado
Dia 18/10 ocupado
Dia 19/10 Libre
Dia 20/10 Libre
Dia 21/10 Libre

francodelphi 26-10-2011 23:32:34

Si entendi pero yo lo que necesito es tener el código para calcular eso que me estas diciendo, ese es el tema :/

oscarac 26-10-2011 23:34:10

ohhh ya...
codigo...
tienes algo?
tienes al menos el modulo de la reserva de las cabañas?

ecfisa 26-10-2011 23:34:26

Hola francodelphi.

Para consultar si está ocupada sólo es necesario evaluar la fecha hasta.

Un ejemplo:
Código Delphi [-]
var
OcupadaHasta: TDateTime;
FechaAConsultar: TDateTime;
begin
OcupadaHasta:= StrToDateTime('05/01/2011'); // fecha hasta
FechaAConsultar:= StrToDateTime('04/1/2011'); // fecha a consultar
if CompareDate(OcupadaHasta, FechaAConsultar) = 1 then
Caption:= 'OCUPADA' // <- Resultado en este ejemplo
else
Caption:= 'LIBRE';
...
A fines del ejemplo asigné los valores a mano, pero lógicamente el valor de OcupadaHasta deberá ser obtenido de alguna tabla.


Saludos.

oscarac 26-10-2011 23:40:40

Cita:

Empezado por ecfisa (Mensaje 416830)
Hola francodelphi.

Para consultar si está ocupada sólo es necesario evaluar la fecha hasta.

Un ejemplo:

Código Delphi [-]
uses DateUtils;
...
var
OcupadaHasta: TDateTime;
FechaAConsultar: TDateTime;
begin
OcupadaHasta:= StrToDateTime('05/01/2011'); // fecha hasta
FechaAConsultar:= StrToDateTime('04/1/2011'); // fecha a consultar
if CompareDate(OcupadaHasta, FechaAConsultar) = 1 then
Caption:= 'OCUPADA' // <- Resultado en este ejemplo
else
Caption:= 'LIBRE';
...




A fines del ejemplo asigné los valores a mano, pero lógicamente el valor de OcupadaHasta deberá ser obtenido de alguna tabla.
Podés ampliar la funcionalidad añadiendo a la fecha la hora (generalmente se desocupan a las diez de la mañana)

Saludos.

siempre eres acertado en tus intervenciones ecfisa... pero no creo que sea tan sencillo,
lo que le planteas, no te da una fecha exacta de cuando este libre la cabaña

francodelphi 26-10-2011 23:55:41

uses DateUtils;
var
var
OcupadaHasta: TDateTime;
FechaConsulta: TDateTime;
begin
OcupadaHasta:= StrToDateTime('05/01/2011 10:00:00 a.m.'); // fecha hasta
FechaConsulta:= StrToDateTime('05/01/2011 09:01:00 a.m.'); // fecha a consultar
if CompareDateTime(OcupadaHasta, FechaConsulta) = -1 then
Caption:= 'LIBRE'
else
Caption:= 'OCUPADA';

Lo que no entiendo , es que aca ustedes le asignan una fecha . Yo tengo que tomar referencia con los 2 campos de fecha de la tabla ya cargadas , y ahi que el sistema me diga si esta ocupada o no..osea, como levanto las fechas de la tabla de la bd?, mas arriba puse los campos de mi bd..y una mas, si mi cabaña esta ocupada del 10/10/2011 al 15/10/2011 y viene otra persona y me la quiere alquilar del 11/10/2011 al 14/10/2011 como hago el control para que me diga que esta ocupada?

oscarac 27-10-2011 00:00:51

eso te explicaba en post anteriores

pseudocodigo:

Código Delphi [-]
 
Fecha := FechaHasta
while FechaHasta >= Fecha do
begin
  qrybuscarfechaenTabla.parameters.parambyname('fecha').value := fecha
  qrybuscarfechaenTabla.open
  if qrybuscarfechaenTabla.reccount <> 0 Then
   label.caption := 'ocupada'
  else
   label.caption := 'Libre'
  Inc (fecha)
end

ecfisa 27-10-2011 01:22:15

Hola.


Cita:

lo que le planteas, no te da una fecha exacta de cuando este libre la cabaña
Tenés toda la razón, no se me ocurrió pensar que podrían reservar con fecha anterior a una reserva...:o, pero no veo la necesidad de recorrer las fechas, creo que podría hacer algo como:
Código Delphi [-]
function TForm1.CabaniaOcupada(Numero: string; Fecha: TDateTime): Boolean;
begin
  with qyCabania do
  begin
    SQL.Text:= 'SELECT * FROM CABANIAS WHERE NUMERO = :NUM';
    ParamByName('NUM').AsString:= Numero;
    Open;
    Result:= (Fecha >= FieldByName('OCUPADADESDE').AsDateTime) and
             (Fecha <= FieldByName('OCUPADAHASTA').AsDateTime);
    if IsEmpty then
        ShowMessage('cabaña inexistente');
    Close;
  end;
end;

Llamada de ejemplo:
Código Delphi [-]
...
 if CabaniaOcupada('001', DateTimePicker1.DateTime) then
   ShowMessage('OCUPADA')
  else
   ShowMessage('LIBRE');


Un saludo.


La franja horaria es GMT +2. Ahora son las 21:38:49.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi