Newsgroup: it.comp.www.asp
Titolo: gestione intervalli: domanda cazzuta

ho due varibili  con 2 valori di data
bstart=inizio intervallo
bend=fine intervallo
questa query qui sotto dovrebbe verificare che l'intervallo che un utente
sceglie non sia gia stato selezionato da un altro... in pratica solo se e'
EOF e BOF l'utente puo' registrare il suo intervallo di tempo ( che
rappresenta una prenotazione...)
la struttra della tabella booking e' la seguente
IDprenotazione        bstart                 bend
1                            data inizio         data fine
2                            data inizio         data fine
SQL = "SELECT * FROM booking WHERE ((#"&bstart&"#>=booking.bstart AND
#"&bstart&"#<booking.bend) OR (#"&bend&"#>=booking.bstart AND
#"&bend&"#<=booking.bend) OR (#"&bstart&"#<=booking.bstart AND
#"&bend&"#>=booking.bend)) ORDER by bstart"
In pratica non sono sicuro che la query qui sopa sia esatta..... mi sembra
 ma non sono sicuro.... purtroppo lo faccio per hobby e non ho tasntissimo
tempo per testare ste cose...e poi sono newbbie...) che mi dia come occupati
anche valori che in realta sono liberi,..


La query e' alquanto incasinata, ed il problema anche. Adesso, se ho capito
bene,
il tuo problema potrebbe essere analizzato in questo modo:
 ------------------!--------------!-------------------
 ------------>-----------<---------------------------- FALSE
 -------------------->--------<----------------------- FALSE
 -------------------->-----------------<-------------- FALSE
 ------------>----------------------<----------------- FALSE
 ----------------------------------->----------<------ TRUE
 --->----------<-------------------------------------- TRUE
i segni ! rachiudono l'intervallo gia' prenotato, i tentativi di
prenotazione sono
quelli indicati da >---< dove > e < rappresentano Start ed End. Ora, se
analizziamo
la logica delle varie prenotazioni, vediamo che gli unici due intervalli
"buoni",
sono gli ultimi due (indicati con TRUE). Questi due sono caratterizzati da
questa condizione:
 END < _start_ OR START > _end_
dove END e START sono le date dell'intervallo e _start_ ed _end_ quelle
dell'intervallo
da scartare.
Quindi credo (sottolineo credo) che tu possa usare questo semplice confronto
per
verificare il tuo intervallo.
Prova un po' e fammi sapere.
Davide

 per verificare il tuo intervallo.
Questo e' valido se c'e' una sola prenotazione, ma se ci sono piu'
prenotazioni?
Saluti.
Stefano.

 wrote in message
news:39326741$1...@news.ricamarte.com...


 O no?
No, possono esserci spazi vuoti all'interno di questo intervallo.
Saluti.
Stefano.

 wrote in message
news:39328db9$1...@news.ricamarte.com...


SELECT * from tabella WHERE giornofine > miapartenza ORDER BY giornoinizio
periodovalido = false
Do Until RS.EOF
    If miapartenza > giornofine Then
        RS.MoveNext
        If mioarrivo < giornoinizio Then
            periodovalido = true
            End Do
        End If
    End If
    RS.MoveNext
Loop
Io userei una soluzione di questo genere. Con la query elimino una parte dei
valori che non mi riguardano. Per gli altri controllo che finiscano prima
del periodo che mi interessa e che il periodo occupato successivo inizi
dopo.
Questa soluzione non funziona in caso di periodi sovrapposti ma visto che tu
devi evitare questo direi che non ci sono problemi.
Saluti.
Stefano.

grazie mille :) come ho gia scritto la mia query e' corretta... ma se mi si
presenteranno altri problemi questa tua soluzione mi aiutera' sen'altro :)


Grazie a tutti per l'aiuto. La query e' corretta....ho trovato il bug ed e'
di altro genere....
Vi descrivo il bug cosi' magari mi date un mano :)
praticamente io formatto tutte le date nel seguente formato
FormatDateTime(bstart,0)
che mi restituisce la data bstart (variabile variant) in questo formato:
03/06/00 20.00.00
il problema sorge quando i giorni sono indicati da un numero piu' piccolo di
quello che rappresenta i mesi.... in pratica se io gli passo la data in
questo formato e il numero di giorni e' inferiore al numero dei mesi il
driver del database pensa che il formato sia mm/gg/aa anziche' gg/mm/aa....
ora gironzolo un po' sui siti dei tutorial.... ma se avete suggerimenti....
sparate pure :)

 0 vuol dire che c'e' almeno un record che soddisfa la condizione e che
quindi blocca la tua nuova registrazione, in caso contrario, cioe' se vale
0, quel periodo e' libero.
Giorgio Leonardi

 sparate pure :)
si, ammazzare l'analista ed il programmatore Vbscript/Vba/Vb, che hanno
definito la gestione delle date.
mi pare di avere avuto lo stesso problema a suo tempo e l'ho gestito
girando la data con l'anno davanti
(mi pare su quattro caratteri)
a.cara

 wrote in message
news:39342BB5...@blunet.it...


grazie a tutti ho risolto anche sto altro problema con questa funzioncina...
FUNCTION Data_Girata(Data)
 gg=Day(Data)
 If Len(gg)=1 Then gg="0" & gg
 mm=Month(Data)
 If Len(mm)=1 Then mm="0" & mm
 yy=Year(Data)
 ora=FormatDateTime(Data,vblongtime)
 Data_Girata=yy & "/" & mm & "/" & gg & " " & ora
END FUNCTION