Newsgroup: it.comp.www.asp
Titolo: [AIUTO] Servizio prenotazioni

Ciao a tutti,
per imparare sto cercando di realizzare un sistema per la prenotazione che
deve essere condiviso da 4 alberghi della mia zona.
Ho diversi problemini che non riesco a risolvere.
Qualcuno di voi ha per caso qualche esempio da potermi studiare? ve n e
sarei infinitamente grato, grazie.
Ciao Stefano

 Ho diversi problemini che non riesco a risolvere.
che problemi hai??

Sono riuscito a far selezionare gli hotel che hanno delle camere disponibili
nella data richiesta, ma ora devo far si' che mi estragga per l'hotel che
l'utente sceglie il numero di camera e relativa tipologia (doppia, singola,
ecc.)
Invece mi continua a estrarre questi ultimi dati a capocchia: es un hotel ha
3 stanze di cui una è occupata e mi dà alcune camere disponibili addirittura
2 volte, mi dà disponibile anche quella che non lo è e in compenso non mi dà
un'altra che è libera.
Non sto a postarti qui tutto il codice che è un po' lungo, ma faccio una
query sulla tabella con le prenotazioni, estraggo le camere dell'hotel
scelto che sono occupate nel periodo richiesto, dopo di che estraggo
dall'elenco delle camere quelle che hanno numero diverso da quelle occupate.
Sto sclerando da un po' e non riesco a capire dov'è che sbaglio... perchè lo
so che sono io che sbaglio.
Ciao Stefano

 dall'elenco delle camere quelle che hanno numero diverso da quelle occupate.
Eh? Cioè?
Se devi ottenere SOLO le camere che NON sono prenotate, puoi fare una 
sola query, sul tipo di 
SELECT numerocamera FROM camere 
WHERE ID NOT IN (SELECT ID FROM prenotazioni)

 
Scusa,
errorino, va cosě:
SELECT numerocamera FROM camere 
WHERE ID NOT IN (SELECT IDcamera FROM prenotazioni)

OK, ecco la query
La struttura del DB è la seguente:
1. tabella Hotel con tutti i dati dell'hotel;
2. tabella Camere con le camere numerate (Campo CAMERE) e la TIPOLOGIA e
l'ID dell'Hotel
3. tabella Booking con l'ID dell'Hotel (HOTELNO) e l'ID del Cliente
4. tabella Ospiti con i dati degli Ospiti.
<% sql="Select Booking.Camera FROM Booking WHERE #"&DAL&"# Not Between
Booking.ARRIVO And Booking.PARTENZA And #"&AL&"# Not Between Booking.ARRIVO
And Booking.PARTENZA And Booking.ARRIVO Not Between #"&DAL&"# And #"&AL&"#
And Booking.PARTENZA Not Between #"&DAL&"# And #"&AL&"# GROUP BY
Booking.Camera"
Set RH = Server.CreateObject("ADODB.Recordset")
RH.Open SQL,OBJdbConnection,3,1
do while not RH.EOF
ROOM=RH("Camera")
RH.MoveNext
loop
sql="Select Camere.Tipologia FROM Camere WHERE HotelNo LIKE '"&HotelNo&"'
AND NOT Camere.Camera LIKE '"&ROOM&"' GROUP BY Camere.Tipologia,
Camere.Camera Order By Camere.Camera "
Set RS = Server.CreateObject("ADODB.Recordset")
RS.Open SQL,OBJdbConnection,3,1
do while not RS.EOF
%>
<%=RS("Camera")%>"> - <%=RS("Tipologia")%>
*****
***** QUI VORREI ESTRARRE IL NUMERO
***** DELLA STANZA = RS("CAMERA") E
***** LA TIPOLOGIA RAGGRUPPATA,
***** CIOE' SE CI SONO LIBERE 3 DOPPIE
***** ME LE RIPORTA SOLO UNA VOLTA
***** CARICANDO IL NUMERO DELLA
***** PRIMA STANZA CHE INDIVIDUA
*****
<%
RS.MoveNext
loop
set RS=Nothing
set RH=Nothing
%>
Grazie
Stefano

 ROOM=RH("Camera")
qui la var ROOM viene rimpiazzata sempre con l'ultimo valore.
Quindi il loop è inutile. 
Sela stampi a video, vedrai che contiene solo l'ultimo valore, e per 
forza!
Forse volevi fare ROOM = ROOM & RS("Camera").
Ma usare tale stringa (ROOM) poi nel LIKE ti darà risultati errati, 
direi.
Adesso non sto a ragionare sulla prima query, che è già abbastanza 
rognosa di suo. Spero solo che dentro a quelle tabelle ci siano pochi 
record, sennò povero access...
Cmq...
prova con una cosa tipo
(qui lascio invariato)
sql="Select Booking.Camera FROM Booking WHERE #"&DAL&"# Not Between
Booking.ARRIVO And Booking.PARTENZA And #"&AL&"# Not Between 
Booking.ARRIVO And Booking.PARTENZA And Booking.ARRIVO Not Between 
#"&DAL&"# And #"&AL&"# And Booking.PARTENZA Not Between #"&DAL&"# And 
#"&AL&"# GROUP BY Booking.Camera"
(qui cambio
sql2 ="Select Camere.Tipologia FROM Camere WHERE HotelNo LIKE 
'"&HotelNo&"' AND Camere.Camera NOT IN (" & slq & ") GROUP BY 
Camere.Tipologia, Camere.Camera Order By Camere.Camera "
Quindi, vien fatto tutto in una sola query.
Non so se possa funzionare. E comunque, la vedo dura. Se poi hai tanti 
record, ti si riempie un buffer che è un piacere...
Ma la prima query deve essere proprio così incasinata? Adesso non ho 
testa per analizzarla un minimo ma...
Prova a pensare se puoi alleggerire la cosa. Se puoi usare le stored 
query di access, meglio se puoi ottenere un db più potente, tipo 
SQLserver, e lavorare sulle stored procedures