cs_calixte35
Messages postés1Date d'inscriptionmercredi 24 juin 2009StatutMembreDernière intervention 9 mai 2011
-
9 mai 2011 à 21:00
LIBRE_MAX
Messages postés1402Date d'inscriptionmardi 1 mai 2007StatutMembreDernière intervention 7 octobre 2012
-
11 mai 2011 à 17:37
Je crée actuellement un projet codé en VB NET. Ce projet consiste en la gestion d'un hôtel.
Je souhaite afficher toutes les chambres disponibles dans une période choisie par l'utilisateur.
voici le début pour que vous compreniez mon problème :
SELECT id_chambre, nom_chambre FROM Chambres
INNER JOIN Reservations ON Chambres.id_chambre=Reservations.id_chambre
WHERE ...
C'est le WHERE qui me pose problème !
Quels sont les test à effectuer pour que les chambres réservées pendant cette période, ne soit pas prises en compte...
et ensuite dans l'interface deux dates sont choisis : (champs calendrier en VB NET)
-calendDu.value
-calendAu.value
Voila...donc ma question concerne "l'organisation" de tout cela pour que ça fonctionne correctement.
On comprend bien si le client recherche du 13/05 au 21/05, mais qu'une réservation cours dans une chambre du 10/05 au 15/05, et bien on n'affichera pas cette chambre...
Faut -il utiliser des opérateurs de compraisons ?
Vraiment merci de m'aider !
NHenry
Messages postés15113Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention22 avril 2024159 9 mai 2011 à 22:48
Bonjour,
J'aurais fait "un peu" plus bourrin :
SELECT id_chambre, nom_chambre FROM Chambres WHERE (
NOT id_cham IN (
SELECT id_chambre FROM RESERVATIONS WHERE (
date_deb_reserv BETWEEN " + calendDu.value + " AND " + calendAu.value + "
) OR (
date_fin_reserv BETWEEN " + calendDu.value + " AND " + calendAu.value + "
)
)
)
Ici on a une requête imbriquée qui retourne la liste des chambres occupées puis on ne garde que les chambres qui ne font pas parties de la liste.
Bien sûr, il faudra formater calendAu.value et calendDu.value en fonction de ton SGBD.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 9 mai 2011 à 22:56
Pas bonjour non plus.
Complexe.
Une chambre libre est une chambre sans réservation - Lapalisse (1470-1525)
Il convient donc de rechercher quelles chambres n'apparaissent pas dans les fiches de réservations entre ces deux dates.
Genre (incomplet) :
Where Chambres.id_chambre Not In
(Select Reservations.id_chambre
From Reservations
Where Reservations.date_deb_reserv Between #" & -calendDu.value & "# "
And #" & -calendAu.value & "#"
Nota 1 : Cette syntaxe n'est peut-être pas compatible avec Access mais l'est surement sous SQL Server - non précisé.
Nota 2 : Je suppose que -calendDu et -calendAu sont des objets de ton programme.
La grosse difficulté, c'est que ta table mémorise les dates de début et de fin, et que la recherche peut-être fausse si tu tapes une date à l'intérieur de la période de réservation d'une autre chambre.
Une possibilité :
Gérer des requêtes incrémentales, c'est à dire faire autant de requêtes que de jours à rechercher.
Si tu dois chercher des chambres entre le 2 et le 4 juin, il faudra faire une recherche pour le 2 juin, avec pour bornes les dates de la table, exemple
Where #" & LaDateTestee & "# Between Reservations.date_deb_reserv
And Reservations.date_fin_reserv
puis, à l'identique pour le 3 et le 4 juin.
Si la chambre testée apparait dans une seule des 3 requêtes, cela voudra dire que la chambre est occupée au moins sur une date.
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)