Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2003
    Messaggi
    376

    Inserimento di data tra piu' range di date

    Salve a tutti, come descritto nel titolo ho questo problema:
    Ho un torneo PIPPO dal 03/04/2017 al 30/04/2017
    Ho un torneo PLUTO dal 07/05/2017 al 15/05/2017
    Vorrei che quando inserisco un torneo per esempio nella data dal 03/05/2017 al 12/05/2017 o comunque in una data che è già impegnata, mi avvertisse tramite pop-up, mentre se inserisco il torneo per esempio dal 25/03/2017 al 02/04/2017 oppure dal 16/05/2017 al 27/05/2017 andasse avanti con il codice.
    Vi posto quello che ho fatto, ma funziona a metà nel senso che da errore anche quando non dovrebbe. Grazie.
    codice:
    'FUNZIONE PER CONTROLLARE SE ESISTE GIA' UN TORNEO IN QUELLA DATA
    if (request.form("DataStopTorneo") <> "" and request.form("DataStartTorneo") <> "") then
    	DataItaliaStart = request.form("DataStartTorneo")
    	DataItaliaStop = request.form("DataStopTorneo")
    'SELEZIONO I TORNEI ESISTENTI
    	Set RSControlloTorneo = Server.CreateObject("ADODB.Recordset")
    	RSControlloTorneo.ActiveConnection = strConn
    	RSControlloTorneo.Source = "SELECT * FROM "&TabAttuale&""
    	RSControlloTorneo.CursorType = 0
    	RSControlloTorneo.CursorLocation = 3
    	RSControlloTorneo.LockType = 3
    	RSControlloTorneo.Open()
    
    
    'CONTROLLO CHE ESISTA ALMENO UN TORNEO
    	if not RSControlloTorneo.eof then
    		RSControlloTorneo.movefirst
    		while not RSControlloTorneo.eof
    		DataControlloStart = RSControlloTorneo.fields.item("DataStartTorneo").value
    		DataControlloStop = RSControlloTorneo.fields.item("DataStopTorneo").value
    			if datediff("d",DataItaliaStart,DataControlloStop) >= 0 then%>
    				<script type="text/javascript">
    				<!--
    				  function doRedirect() {
    					location.href = "crea_torneo.asp";
    				  }
    				  window.alert("ATTENZIONE! LA DATA IMMESSA NON E' DISPONIBILE");
    				  window.setTimeout("doRedirect()", 10);
    				//-->
    				</script>
                    
    <%				'response.end
    			end if
    		RSControlloTorneo.movenext			
    		wend	
    	end if
    end if
    %>
    :messner:
    Chi Crede in Me non Perirà MAI

  2. #2
    Utente di HTML.it L'avatar di vic53
    Registrato dal
    Oct 2010
    residenza
    Fonte Nuova (Roma)
    Messaggi
    592
    Quote Originariamente inviata da devil946 Visualizza il messaggio
    Salve a tutti, come descritto nel titolo ho questo problema:
    Ho un torneo PIPPO dal 03/04/2017 al 30/04/2017
    Ho un torneo PLUTO dal 07/05/2017 al 15/05/2017
    Vorrei che quando inserisco un torneo per esempio nella data dal 03/05/2017 al 12/05/2017 o comunque in una data che è già impegnata, mi avvertisse tramite pop-up, mentre se inserisco il torneo per esempio dal 25/03/2017 al 02/04/2017 oppure dal 16/05/2017 al 27/05/2017 andasse avanti con il codice.
    Vi posto quello che ho fatto, ma funziona a metà nel senso che da errore anche quando non dovrebbe. Grazie.
    codice:
    'FUNZIONE PER CONTROLLARE SE ESISTE GIA' UN TORNEO IN QUELLA DATA
    if (request.form("DataStopTorneo") <> "" and request.form("DataStartTorneo") <> "") then
        DataItaliaStart = request.form("DataStartTorneo")
        DataItaliaStop = request.form("DataStopTorneo")
    'SELEZIONO I TORNEI ESISTENTI
        Set RSControlloTorneo = Server.CreateObject("ADODB.Recordset")
        RSControlloTorneo.ActiveConnection = strConn
        RSControlloTorneo.Source = "SELECT * FROM "&TabAttuale&""
        RSControlloTorneo.CursorType = 0
        RSControlloTorneo.CursorLocation = 3
        RSControlloTorneo.LockType = 3
        RSControlloTorneo.Open()
    
    
    'CONTROLLO CHE ESISTA ALMENO UN TORNEO
        if not RSControlloTorneo.eof then
            RSControlloTorneo.movefirst
            while not RSControlloTorneo.eof
            DataControlloStart = RSControlloTorneo.fields.item("DataStartTorneo").value
            DataControlloStop = RSControlloTorneo.fields.item("DataStopTorneo").value
                if datediff("d",DataItaliaStart,DataControlloStop) >= 0 then%>
                    <script type="text/javascript">
                    <!--
                      function doRedirect() {
                        location.href = "crea_torneo.asp";
                      }
                      window.alert("ATTENZIONE! LA DATA IMMESSA NON E' DISPONIBILE");
                      window.setTimeout("doRedirect()", 10);
                    //-->
                    </script>
                    
    <%                'response.end
                end if
            RSControlloTorneo.movenext            
            wend    
        end if
    end if
    %>
    :messner:
    scusami ma stai mischiando procedure sule server con quelle che fa il client?
    se fai una interrogazione sul lato server, uno si aspetta che scrivi il risultato sul client e invece vedo che proponi al client una function che visualizza lìerrore.... macchinoso e non dovrebbe funzionare....
    piuttosto fai una sql sul range date del db e se trovi la corrispondenza fai una finestra con un messaggio... ma solo con ajax lo puoi fare; lato client per esempio inserisci le due date e premi il bottone di ricerca... fai partire uno script ajax che cerca sul lato server la tua ricerca...e se trova per esempio quello che cerchi, crea un messaggio che ha in testa un valore tipo zero che significa che la ricerca è andata a buon fine e se non ha trovato riscontro metti un codice diverso da zero che poi nel client identificherai nella risposta mandando o meno o a una pagina ok o a un messaggio si errore...
    piu semplice a farsi che a spiegarlo...
    se vuoi esempi ti mando qualcosa di mio gia usato nelle mie procedure di applicativi che costruisco.
    ciao
    Vic53

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2003
    Messaggi
    376
    grazie ma non conosco ajax, comunque prova a mandarmi qualcosa
    Chi Crede in Me non Perirà MAI

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2003
    Messaggi
    376
    nessuna ha altre idee, come potrei ovviare all'uso di ajax?
    Magari anche cambiando il codice.
    Chi Crede in Me non Perirà MAI

  5. #5
    Utente di HTML.it L'avatar di vic53
    Registrato dal
    Oct 2010
    residenza
    Fonte Nuova (Roma)
    Messaggi
    592
    Quote Originariamente inviata da devil946 Visualizza il messaggio
    nessuna ha altre idee, come potrei ovviare all'uso di ajax?
    Magari anche cambiando il codice.
    Esempio crei una tabella dateimpegnate con key = codiceTorneo e datadel giorno e inserisci un record per ogni data del range che inserisci per quel torneo...
    Poi quando devi inserire un nuovo torneo prima dell'inserimento fai una lettura per ogni giorno del torneo in una funzione e se trovi una data imapegnata dai errore altrimenti inserisci....
    Questo per qrandi linee poi devi scrivere il codice
    Vic53

  6. #6
    Amministratore L'avatar di Vincent.Zeno
    Registrato dal
    May 2003
    residenza
    Emilia-Romagna (tortellini und cappelletti land!)
    Messaggi
    20,783
    in questo contesto è giusta la soluzione "calendario": ovvero segnare come "occupate" le date dall'inizio alla fine di ogni torneo.
    quindi passarle una ad una (dall'inizio del nuovo torneo alla fine dello stesso) per verificare che siano libere (altrimenti le interrogazioni si allungherebbero ancora di più). serve quindi una tabella apposita. bastano due campi: data (tipo data) e occupato (tipo true/false). ce ne mettrei anche un terzo che identifichi il torneo che ha l'impegno, così da poter fare query incrociate alla bisogna
    "occupato" e "idTorneo" si potrebbero unificare mettendo a 0 il valore per riconoscerlo come libero... è più una questione di stile e di convenienza: a te la scelta.

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2003
    Messaggi
    376
    Grazie delle risposte, io ho già una tabella dove ho la data di inizio e la data di fine del torneo, il suo nome
    codice:
    <%
    strConn = "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("mdb-database\Sito.mdb")
    Anno = right(datepart("yyyy",Date()),2)
    AnnoIntero = datepart("yyyy",Date())
    AnnoPrecedente = AnnoIntero - 1
    
    
    TabAttuale ="T_Tornei"&AnnoPrecedente&"\"&Anno
    
    
    'FUNZIONE PER CONTROLLARE SE ESISTE GIA' UN TORNEO IN QUELLA DATA
    if (request.form("DataStopTorneo") <> "" and request.form("DataStartTorneo") <> "") then
    	DataItaliaStart = request.form("DataStartTorneo")
    	DataItaliaStop = request.form("DataStopTorneo")
    'SELEZIONO I TORNEI ESISTENTI
    	Set RSControlloTorneo = Server.CreateObject("ADODB.Recordset")
    	RSControlloTorneo.ActiveConnection = strConn
    	RSControlloTorneo.Source = "SELECT * FROM "&TabAttuale&""
    	RSControlloTorneo.CursorType = 0
    	RSControlloTorneo.CursorLocation = 3
    	RSControlloTorneo.LockType = 3
    	RSControlloTorneo.Open()
    
    
    'CONTROLLO CHE ESISTA ALMENO UN TORNEO
    	if not RSControlloTorneo.eof then
    		RSControlloTorneo.movefirst
    		while not RSControlloTorneo.eof
    		DataControlloStart = RSControlloTorneo.fields.item("DataStartTorneo").value
    		DataControlloStop = RSControlloTorneo.fields.item("DataStopTorneo").value
    			if datediff("d",DataItaliaStart,DataControlloStop) >= 0 then%>
    				<script type="text/javascript">
    				<!--
    				  function doRedirect() {
    					location.href = "crea_torneo.asp";
    				  }
    				  window.alert("ATTENZIONE! LA DATA IMMESSA NON E' DISPONIBILE");
    				  window.setTimeout("doRedirect()", 10);
    				//-->
    				</script>
                    
    <%				'response.end
    			end if
    		RSControlloTorneo.movenext			
    		wend	
    	end if
    end if
    %>
    Ma da errore anche quando cerco di inserire in date libere
    Chi Crede in Me non Perirà MAI

  8. #8
    Amministratore L'avatar di Vincent.Zeno
    Registrato dal
    May 2003
    residenza
    Emilia-Romagna (tortellini und cappelletti land!)
    Messaggi
    20,783
    sia vic53 che io ti abbiamo suggerito di fare un'altra cosa:
    creare anche la tabella "calendario" con 366 record che contenga tutte la date (potresti chiamare il campo "anno"), a fianco ci metti un campo che indichi se la data è occupata o la key di chi lo occupa. oppure non metti 366 record ma solo quelli occupati. poi fai un controllo per ogni singola data che vuoi inserire.
    fare una verifica di un range su una tabella che non ha un range (ma solo inizio e fine) diventa complicato:
    dovresti replicare il concetto del calendario tramite script e li fare la verifica; per me è un lavoro macchinoso e perditempo.

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2003
    Messaggi
    376
    ok adesso ho capito cosa intendevate, infatti io avevo intrapreso la strada dello script ma era sembrata subito in salitissima, e quindi ho voluto chieder ausilio.
    Grazie 1000000
    Chi Crede in Me non Perirà MAI

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2003
    Messaggi
    376
    Aiuto mi ci sono annodato.
    codice:
    If (CStr(Request("compila")) = "1") Then
    	Nome = replace(request.Form("Torneo"),"'","''")
    	DataStart = request.Form("DataStartTorneo")
    	GiornoStart = Mid(DataStart, 9, 2)
    	MeseStart = Mid(DataStart, 6, 2)
    	AnnoStart = Mid(DataStart, 1, 4)
    	DataStart1 = MeseStart&"/"&GiornoStart&"/"&AnnoStart
    	
    	DataStop = request.Form("DataStopTorneo")
    	GiornoStop = Mid(DataStop, 9, 2)
    	MeseStop = Mid(DataStop, 6, 2)
    	AnnoStop = Mid(DataStop, 1, 4)
    	DataStop1 = MeseStop&"/"&GiornoStop&"/"&AnnoStop
    	
    	if (RsTornei.eof or RsTornei.bof) then		
    		Set cn1 = Server.CreateObject("ADODB.Connection")
    		cn1.Open strConn
    		GiorniTorneo = datediff("d", DataStart, DataStop)
    		for x = 0 to GiorniTorneo
    			sql = "INSERT INTO "&TabAttuale&"( Nome, Data, Occupato) " &_
    			 "VALUES ( '" & Nome & "',#" & DataStart & "#,1)"
    			cn1.Execute sql
    			DataStart = dateadd("d", 1, DataStart)
    		next
    	end if
    		response.Redirect("crea_torneo.asp")
    end if
    DataStart e DataStop sono nel formato aaaa/mm/gg.
    Quando vado ad inserire i valori nella tabella , questo è il risultato: datastart : 05 aprile 2017 e datastop 21 aprile 2017.
    Come ne esco? Grazie
    Data
    05/04/2017
    04/06/2017
    04/07/2017
    04/08/2017
    04/09/2017
    04/10/2017
    04/11/2017
    04/12/2017
    13/04/2017
    14/04/2017
    15/04/2017
    16/04/2017
    17/04/2017
    18/04/2017
    19/04/2017
    20/04/2017
    21/04/2017
    Chi Crede in Me non Perirà MAI

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.