PDA

Ver la Versión Completa : Consulta de Fechas


davidjeifetz
27-05-2010, 15:51:14
Hola!! estoy haciendo un sistema de gestion hotelera y necesito validar unas fechas.

Para hacer una nueva reserva, necesito validar que no haya una reserva ya pendiente para la fecha que elijo.

Entonces para realizar una nueva reserva...necesito validar con el numero de habitacion y las fechas de ingreso y egreso de la misma.

Lo que pude hacer hasta ahora es lo siguiente:

SELECT * FROM Reserva WHERE Numero_Habitacion=:a0 and (Fecha_Ingreso between :a1 and :a2 or Fecha_Salida between :a3 and :a4)
De esta forma valido que si la fecha de ingreso o la fecha de egreso estan entre el rango de fechas que elijo no me deje hacer la reserva.

el problema que se me presenta ahora es el siguiente:

Suponiendo que tenga una reserva que ingresa el 23 y sale el 27; si en el rango de fechas yo elijo 24 y 26....no me sale que hay una reserva pendiente y me deja hacer la reserva; lo que no deberia pasar.

utilizo Delphi 7 y MySQL 5.0

Espero que me haya explicado lo suficiente y desde ya agradezo la posible ayuda que me puedan brindar.

Saludos!!

Casimiro Notevi
27-05-2010, 16:48:50
Creo que primero debes chequear que la nueva reserva no esté entre los días ocupados por la que ya hay, o sea:

Campos en la tabla reservas: codigohabitacion, fechaentrada, fechasalida

Primero, que la fechaIN no esté comrprendida entre esas fechas ya que está ocupada.
Además la fecha de salida no debe coincidir tampoco con ninguna fecha que esté ocupada la habitación, por lo tanto, en principio, se me ocurre algo como esto;

select *
from tbReservas
where (fechaIN < fechaentrada or fechaIN > fechasalida)
and (fechaOUT < fechaentrada or fechaOUT > fechasalida)


Evidentemente, habrá que comprobar que fechaIN es menor que fechaOUT.

También hay que comprobar que por ejemplo la fechaIN puede ser menor que fechaentrada, pero entonces la fechaOUT no puede ser mayor que fechasalida, tendrá que ser también menor que fechaIN, "salga usted de la habitación que este fin de semana está reservada a otra persona y el lunes ya puede usted volver a ella". Como eso no se puede permitir, entonces hay que añadir al select:


and ((fechaIN < fechaentrada) or (fechaIN > fechasalida))


Seguro que hay otra forma más fácil :D