Ciclo while

  • Creatore Discussione Creatore Discussione dream_
  • Data di inizio Data di inizio

dream_

Nuovo Utente
11 Ott 2008
8
0
0
Ciao,
ho un problema con un ciclo while (di seguito il codice).
annoIniziale = Request.Form("ANNOINIZIALE")
meseIniziale = Request.Form("MESEINIZIALE")
annoFinale = Request.Form("ANNOFINALE")
meseFinale = Request.Form("MESEFINALE")

annoInizialeBCKCNG = annoIniziale
meseInizialeBCKCNG = meseIniziale
annoFinaleBCKCNG = annoFinale
meseFinaleBCKCNG = meseFinale

Response.Write "Anno Iniziale: "& annoIniziale%><br><%
Response.Write "Mese Iniziale: "& meseIniziale%><br><%
Response.Write "Anno Finale: "& annoFinale%><br><%
Response.Write "Mese Finale: "& meseFinale%><br><%

Response.Write "Anno InizialeBCK: "& annoInizialeBCKCNG%><br><%
Response.Write "Mese InizialeBCK: "& meseInizialeBCKCNG%><br><%
Response.Write "Anno FinaleBCK: "& annoFinaleBCKCNG%><br><%
Response.Write "Mese FinaleBCK: "& meseFinaleBCKCNG%><br><%

' Con il while si controllano quali mesi prendere da conguaglio e quali da produzione
do While (((annoFinaleBCKCNG > annoIniziale) _
OR (annoFinaleBCKCNG = annoIniziale AND meseFinaleBCKCNG >= meseIniziale ))_
AND trovato = false _
)

set obj = createobject("BilDefinitvoPrj.cBilancioDefinitivo")
risultato = obj.verificaCNG(annoFinaleBCKCNG,meseFinaleBCKCNG,Application("CNG_DB"))
set obj=nothing

Response.Write "Risultato: "& risultato%><br><%

if risultato = "ok" then 'I dati per tale mese sono in conguaglio.
'Si esce dal ciclo
annoInizialeCNG = CInt(annoIniziale)
meseInizialeCNG = CInt(meseIniziale)
annoFinaleCNG = CInt(annoFinaleBCKCNG)
meseFinaleCNG = CInt(meseFinaleBCKCNG)

trovato = true

Response.Write "Trovato!!! Anno finale CNG: "& annoFinaleCNG & ", Mese finale CNG: " & meseFinaleCNG

elseif risultato = "ko" then'I dati per tale mese NON sono in conguaglio;

Response.Write "Test fallito con: Anno finale CNG: "& annoFinaleBCKCNG & ", Mese finale CNG: " & meseFinaleBCKCNG %><br> <%
annoInizialePROD = CInt(annoFinaleBCKCNG)
meseInizialePROD = CInt(meseFinaleBCKCNG)
annoFinalePROD = CInt(annoFinale)
meseFinalePROD = CInt(meseFinale)

if CInt(meseFinaleBCKCNG) > 1 then
meseFinaleBCKCNG = CInt(meseFinaleBCKCNG) - 1
else
meseFinaleBCKCNG = 12
annoFinaleBCKCNG = CInt(annoFinaleBCKCNG) - 1
end if
Response.Write "Post decremento: Anno finale CNG: "& annoFinaleBCKCNG & ", Mese finale CNG: " & meseFinaleBCKCNG %><br> <%
Response.Write "Post decremento: Anno iniziale: "& annoIniziale & ", Mese iniziale: " & meseIniziale %><br> <%
Response.Write "Post decremento: Trovato: "& trovato%><br> <%
end if

Loop 'Fine ciclo di controllo

if trovato = true then
Response.Write " trovato !!!" %><br> <%
Response.Write "Test con: Anno Iniziale CNG: "& annoInizialeCNG & ", Mese iniziale CNG: " & meseInizialeCNG & " Anno Finale CNG: "& annoFinaleCNG & ", Mese finale CNG: " & meseFinaleCNG %><br> <%
Response.Write "Test con: Anno Iniziale PROD: "& annoInizialePROD & ", Mese iniziale PROD: " & meseInizialePROD & " Anno Finale PROD: "& annoFinalePROD & ", Mese finale PROD: " & meseFinalePROD %><br> <%
'set obj = createobject("BilDefinitvoPrj.cBilancioDefinitivo")
'esito= obj.BilancioDef(annoInizialePROD,meseInizialePROD,annoFinalePROD,meseFinalePROD,annoInizialeCNG,meseInizialeCNG,annoFinaleCNG,meseFinaleCNG,Application("GMS_DB"),Application("CNG_DB"))
'set obj=nothing
else
Response.Write " trovato: " & trovato %><br> <%
Response.Write "Non ho trovato nulla!!!"
end if
end if


L'output è il seguente:
Anno Iniziale: 2008
Mese Iniziale: 3
Anno Finale: 2008
Mese Finale: 9
Anno InizialeBCK: 2008
Mese InizialeBCK: 3
Anno FinaleBCK: 2008
Mese FinaleBCK: 9
Risultato: ko
Test fallito con: Anno finale CNG: 2008, Mese finale CNG: 9
Post decremento: Anno finale CNG: 2008, Mese finale CNG: 8
Post decremento: Anno iniziale: 2008, Mese iniziale: 3
Post decremento: Trovato: False
trovato: False
Non ho trovato nulla!!!


Vorrei che si uscisse dal ciclo o quando l'Anno finale è maggiore dell'anno Iniziale o quando i due anni (iniziale e finale) sono uguali, ma il mese iniziale è maggiore del finale o quando la variabile "trovato" è "true".

Come si vede dall'output anche se i valori soddisfano il ciclo while, il ciclo termina lo stesso dopo la prima iterazione.
Mi aiutate?
Grazie.
 
Con VBScript confesso di non aver mai provato; con Visual Basic esistono i comandi Exit Do, Exit While, Exit For.

Prova a fare uana cosa del genere (del tutto teorico il mio esempio):

While condizione
...
...
...
If controllo Then Exit While
Wend
 
il mio problema è l'inverso: esce dal ciclo quando non dovrebbe!
In ogni caso inserendo Exit While mi dà l'errore: Invalid 'exit' statement
 
Ok, ricordavo bene/male in merito ad Exit e non avevo capito una mazza della domanda :)

Immagino sia un errore logico: puoi spiegarmi esattamente cosa deve fare il ciclo e per effetto di che condizione deve uscire?
 
Devo uscire dal loop se:

1) annoFinaleBCKCNG < annoIniziale oppure annoFinaleBCKCNG = annoIniziale e meseFinaleBCKCNG < meseIniziale
2)Se trovato= true

Di seguito riporto la condizione: resta nel while se:


Do While ( _
( _
(annoFinaleBCKCNG > annoIniziale) OR _
(annoFinaleBCKCNG = annoIniziale AND meseFinaleBCKCNG >= meseIniziale )_
)_
AND trovato = false _
)
 
Appunto: il codice mi dice quando devo restarci. La mia spiegazione dice quando devo uscire!!!! Perciò sono l'opposto!!!
 
Prova a fare una cosa: togli il filto condizionale > o < dal while ed all'interno del ciclo imposta la condizione > o < che ti serve, tipo:

If a > b Then esci = 1

Poi, filtra tutte le operazioni che devi fare:

If esci = 0 Then
...
...
...
End If

Fammi sapere.
 

Discussioni simili