Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di Luca1317
    Registrato dal
    Dec 2001
    Messaggi
    1,258

    Estrazione multipla variabili [avanzato]

    Ho una tabella in cui ho 2 date (CheckIn e CheckOut) che rappresentano le date di arrivo e partenza degli ospiti di un albergo;

    tabella camera1:
    id | . CheckIn . .| CheckOut
    1 .| 10/11/2015 | 12/11/2015
    2 .| 20/11/2015 | 23/11/2015

    prendendo ad esempio questa tabella della camera1, la camera sarà occupata nei giorni:

    10/11/2015
    11/11/2015
    12/11/2015

    20/11/2015
    21/11/2015
    22/11/2015
    23/11/2015

    ora il problema è che non ho idea di come far capire al sistema le date da far contrassegnare come occupate perché, per come è impostato ora lo script, dovrei scorrere il record in un ciclo "for next" che stampa a schermo il calendario e ad ogni scorrere del record i valori risulterebbero doppi;

    nel codice che posterò riesco ad evidenziare a schermo le date in rosso ma solo per l'ultimo record:

    codice:
    SQL="SELECT * FROM Camera1 "                                                     
    Set rec = Server.CreateObject("ADODB.Recordset")
    Set Rec=Conn.Execute(SQL)
    While (NOT rec.EOF)
    
    
    CheckIn=rec("CheckIn")
    CheckOut=rec("CheckOut")
    
    
    rec.MoveNext
    WEnd
    
    
    rec.close
    Set rec = nothing
    
    
    
    
    
    for p=1 to xxxx
    
    IF DateDiff("d",CheckIn,DataCorrente)<0 OR DateDiff("d",CheckOut,DataCorrente)>0 THEN
    .... fai diventare il carattere della DataCorrente in rosso
    END IF
    
    NEXT
    p.s.: il database è access

  2. #2
    Amministratore L'avatar di Vincent.Zeno
    Registrato dal
    May 2003
    residenza
    Emilia-Romagna (tortellini und cappelletti land!)
    Messaggi
    20,783
    non ho capito il discorso sui record doppi...


    Quote Originariamente inviata da Luca1317 Visualizza il messaggio
    nel codice che posterò riesco ad evidenziare a schermo le date in rosso ma solo per l'ultimo record
    tenendo il riconoscimento (il ciclo FOR) al di fuori dei WHILE (e non avendo accumulato le variabili, ad ogni passaggio sovrascrivi le variabili CheckIn CheckOut) ti rimane a disposizione solo l'ultimo record. dovresti stampare o lavorare il record durante il ciclo WHILE, e a quel punto il ciclo FOR non serve nemmeno più.

  3. #3
    Utente di HTML.it L'avatar di Luca1317
    Registrato dal
    Dec 2001
    Messaggi
    1,258
    Quote Originariamente inviata da Vincent.Zeno Visualizza il messaggio
    non ho capito il discorso sui record doppi...



    tenendo il riconoscimento (il ciclo FOR) al di fuori dei WHILE (e non avendo accumulato le variabili, ad ogni passaggio sovrascrivi le variabili CheckIn CheckOut) ti rimane a disposizione solo l'ultimo record. dovresti stampare o lavorare il record durante il ciclo WHILE, e a quel punto il ciclo FOR non serve nemmeno più.
    Il problema è che il ciclo for viene ciclato per n volte mentre il ciclo while, che estrae i record, per x volte.

  4. #4
    Amministratore L'avatar di Vincent.Zeno
    Registrato dal
    May 2003
    residenza
    Emilia-Romagna (tortellini und cappelletti land!)
    Messaggi
    20,783
    Quote Originariamente inviata da Luca1317 Visualizza il messaggio
    Il problema è che il ciclo for viene ciclato per n volte mentre il ciclo while, che estrae i record, per x volte.
    in pratica che vuol dire?

  5. #5
    Utente di HTML.it L'avatar di Luca1317
    Registrato dal
    Dec 2001
    Messaggi
    1,258
    che viaggiano su 2 binari diversi: se il database ha 10 records il ciclo while "ciclerà" 10 volte mentre il ciclo for, quello che uso per stampare le date del calendario, per 30 volte;

    quindi se dovessi seguire il tuo consiglio ("dovresti stampare o lavorare il record durante il ciclo WHILE") avrei difficoltà a metterlo in pratica proprio per il numero diverso di cicli del while e del for.

    intendi questo, giusto?

    codice:
    SQL="SELECT * FROM Camera1 "                                                     
    Set rec =Server.CreateObject("ADODB.Recordset")
    SetRec=Conn.Execute(SQL)
    While(NOT rec.EOF)
    
    
    CheckIn=rec("CheckIn")
    CheckOut=rec("CheckOut")
    
    
    
    ' ciclo for--------------------
    for p=1 to xxxx
    
    IF DateDiff("d",CheckIn,DataCorrente)<0 OR DateDiff("d",CheckOut,DataCorrente)>0 THEN
    .... fai diventare il carattere della DataCorrentein rosso
    END IF
    
    NEXT
    ' ciclo for--------------------
    
    
    rec.MoveNext
    WEnd
    
    
    rec.close
    Set rec = nothing
    

  6. #6
    Amministratore L'avatar di Vincent.Zeno
    Registrato dal
    May 2003
    residenza
    Emilia-Romagna (tortellini und cappelletti land!)
    Messaggi
    20,783
    nel frattempo ho fatto una doccia e mi pare di aver capito le tue intenzioni:

    vorresti stampare a video (in rosso) tutte le date comprese nell'intervallo CheckIn-CheckOut, giusto?
    basta così o devi integrarlo in qualcos'altro?

    e ora prendo pure un caffè!

  7. #7
    Utente di HTML.it L'avatar di Luca1317
    Registrato dal
    Dec 2001
    Messaggi
    1,258
    Esatto, però il tutto deve essere stampato in uno script di calendario:

    codice:
    <% 
    dim nextmonth
    dim acalandardays(42)
    nextmonth = 0
    
    
    dbcurrentdate = date()
    
    
    if res="Yes" then
    	whichdate="01" & "/" & whichmonth & "/" & whichyear
    	if whataction="Next" then
    		dbcurrentdate=dateadd("m",1,cdate(whichdate))
    	elseif whataction="Prev" then
    		dbcurrentdate=dateadd("m",-1,cdate(whichdate))
    	else
    		dbcurrentdate=whichdate
    	end if
    end if
    
    
    Dim dbcurrentdate 
    
    
    dim ifirstweekday
    ifirstweekday = datepart("W",dateserial(year(dbcurrentdate),month(dbcurrentdate),1))
    dim idaysinmonth 
    idaysinmonth = datepart("d",dateserial(year(dbcurrentdate),month(dbcurrentdate)+1,1-1))
    dim iloop
    for iloop = 1 to idaysinmonth
    	acalandardays(iloop+ifirstweekday-1)=iloop
    next
    
    
    dim icolumns,irows
    icolumns = 7 
    irows = 6-int((42-(ifirstweekday+idaysinmonth))/7)
    %>
    
    
    <table align =center border=1 cellspacing = 1 width=45% height=45%>
    
    
    <th colspan=7 bgcolor=lightblue>
    
    
    <%
    curmonth=monthname(month(dbcurrentdate))
    Response.Write curmonth
    curyear=year(dbcurrentdate)
    Response.Write " " & curyear 
    
    
    
    
    
    
    Response.Write	"<tr>"
    Response.Write "<td align=center>"
    Response.Write "<font color=red><b>"
    Response.Write "Sun"
    Response.Write "</font>"
    Response.Write "</td>"
    Response.Write "<td align=center><b>"
    Response.Write "Mon"
    Response.Write "</td>"
    Response.Write "<td align=center><b>"
    Response.Write "Tue"
    Response.Write "</td>"
    Response.Write "<td align=center><b>"
    Response.Write "Wed"
    Response.Write "</td>"
    Response.Write "<td align=center><b>"
    Response.Write "Thu"
    Response.Write "</td>"
    Response.Write "<td align=center><b>"
    Response.Write "Fri"
    Response.Write "</td>"
    Response.Write "<td align=center><b>"
    Response.Write "Sat"
    Response.Write "</td>"
    
    
    Response.Write	"</tr>"
    
    
    
    
    dim irowsloop ,icolumnsloop
    startday=weekday("01" & "/" & monthname(month(dbcurrentdate)) & "/" & year(dbcurrentdate))
    ctr=1
    
    
    for irowsloop = 1 to irows
    	Response.Write "<tr>"
    	if ctr=1 then
    		colm = startday
    	else
    		colm=1
    	end if
    	if startday>1 then
    		diff=colm - 1
    	end if
    		
    		for icolumnsloop=colm to icolumns
    			if acalandardays((irowsloop-1)*7 +icolumnsloop) >= 0 then
    				if diff>0 then
    					for p=1 to diff
    						Response.Write "<td valign= top align=right width=""14%"">"
    						Response.Write "</td>"	
    					next
    					diff=0
    				end if
    					Response.Write "<td valign= top align=right width=""14%"">"
    				
    DataCorrente=acalandardays((irowsloop-1)*7 + icolumnsloop)
    %>
    
    
    
    
    				
    <%
    ' qui stampo la data del calendario ----------------------
    Response.Write(DataCorrente)
    
    
    %>
    
    
    
    
    
    
    				
    <%
    					
    					Response.Write "</td>"
    			else
    				Response.Write "<td>&nbsp;</td>"
    			end if
    			ctr=2
    		next
    		Response.Write "</tr>"
    	colm=2
    next
    Response.Write "<br>"
    %>
    </table>

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.