Avatar billede lazeric Nybegynder
20. december 2005 - 11:02 Der er 10 kommentarer og
1 løsning

Hvordan får jeg denne loop til at stoppe?

Hej. Jeg har lavet en kalender hvor den skal vise det næste entry som er større en nuværende dato. Når så vi når til december skal den jo skifte til det nye år og det gør den også fint med nedenstående loop, men hvis ikke der er noget i kalenderen der er større end nuværende dato, så går den bare i loop og siden kommer aldrig frem. Hvordan stopper jeg den loop?

Her er programmeringen som den ser ud nu:

<!-- der er et view for hver månede -->
<%
if request.querystring("view") = "1" or request.querystring("view") = "2" or request.querystring("view") = "3" or request.querystring("view") = "4" or request.querystring("view") = "5" or request.querystring("view") = "6" or request.querystring("view") = "7" or request.querystring("view") = "8" or request.querystring("view") = "9" or request.querystring("view") = "10" or request.querystring("view") = "11" or request.querystring("view") = "12" then

strNextmth = request("view")
strNextY = request("y")

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("../db/cafe.mdb")
strSQL = "SELECT TOP 1 * FROM kalender WHERE (Month="& strNextmth &") and (Year="& strNextY &") ORDER BY day ASC;"
set rs = Conn.execute(strSQL)
if Rs.eof then
    strNextmth2 = strNextmth+1
    response.redirect "?view="& strNextmth2 &"&y="& strNextY &""
end if
Do While Not Rs.eof
%>


<!-- når månede 12 er overstået skifter den til 13 som jo er næste tal. Nedenstående sætter så månede til 1 igen og hæver årstallet -->
<% if request.querystring("view") = "13" then

strNextY = request("y")

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("../db/cafe.mdb")
strSQL = "SELECT TOP 1 * FROM kalender WHERE Month=1 and (Year="& strNextY &") ORDER BY day ASC;"
set rs = Conn.execute(strSQL)
if Rs.eof then
    strYear = strNextY+1
    response.redirect "?view=1&y="& strYear &""
end if
Do While Not Rs.eof
%>


Og ja... hvordan stopper jeg så loopet når databasen er tom?
Avatar billede saudoo Nybegynder
20. december 2005 - 21:30 #1
En While Wend ser således ud:

While NOT rs.EOF
...
rs.MoveNext
Wend

Og så stopper den.. ;)
Avatar billede lazeric Nybegynder
21. december 2005 - 01:18 #2
Ok, den har jeg aldrig hørt om :-)

Jeg har nu forsøgt den men får fejlen:
***
Microsoft VBScript compilation  error '800a0400'

Expected statement

/cafe/forside.asp, line 85

wend
***

Jeg brugte den således:
***
<%
RS.movenext
wend
Loop
end if%>
***

Hvad gør jeg forkert?
Avatar billede saudoo Nybegynder
21. december 2005 - 01:52 #3
Det meste godt nok.. :P

Her har du et eksempel..

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("../db/cafe.mdb")
strSQL = "SELECT TOP 1 * FROM kalender WHERE Month=1 and (Year="& strNextY &") ORDER BY day ASC;"

set rs = Conn.execute(strSQL)

While NOT rs.EOF
    'Det der skal loopes
rs.MoveNext
Wend

Jeg kan ikke lige gennemskue dit script. :) Men inde i din While Wend, kan du f. eks. skrive Response.Write rs.Fields("Month").. og så vil den poste alle felter i kolonnen Month..
Avatar billede lazeric Nybegynder
21. december 2005 - 02:17 #4
Jeg fanger den ikke helt. Så jeg prøver lige igen :-)
Problemet er nok at jeg ikke ved hvad "wend" gør/betyder?

Men jeg har lavet den således uden held:

<% If en eller anden statement :-)
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("../db/cafe.mdb")
strSQL = "SELECT TOP 1 * FROM kalender WHERE Month=1 and (Year="& strNextY &") ORDER BY day ASC;"

set rs = Conn.execute(strSQL)
end if
Do While Not Rs.eof
%>

Det der skal loopes osv osv osv

<%
RS.movenext
wend
Loop
end if%>

Er det fordi jeg mangler at uddybe hvad der skal ske når den når wend?
Avatar billede saudoo Nybegynder
21. december 2005 - 02:29 #5
Nej.. Men du skal slet ikke have Loop med i bunden. :) Og du behøver egentlig heller ikke Do før While. :).. Prøv at se om det virker?
Avatar billede saudoo Nybegynder
21. december 2005 - 02:32 #6
While starter og Wend slutter.. :)
Du angiver i ud for While, hvornår det forekommer. Og at den skal udskrive dem med rs.MoveNext.
Avatar billede tjp Mester
21. december 2005 - 02:33 #7
'Wend' gør for såvidt intet, udover at afgrænse loop'et. Dvs. at alt mellem 'Do While'-linjen og 'Wend'-linjen gentages indtil betingelsen i 'Do While'-linjen er falsk.
Avatar billede lazeric Nybegynder
21. december 2005 - 12:41 #8
Ok! Ja så fes den ind :-) While slutter med Wend (while end :P).

Men det virker ikke :-(

Her er lige et eksempel på hvad det er jeg har lavet (lidt rodet kode:-)):

<-- Hvis ikke der er angivet hvilken månede (view) den skal kigge i, så kører dette loop --->

<% if request.querystring("view") = "" then

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("../db/cafe.mdb")
strSQL = "SELECT TOP 1 * FROM kalender WHERE Month="&Month(now)&" and year="&Year(now)&" and not day < "&day(now)&" ORDER BY day ASC;"
set rs = Conn.execute(strSQL)
if Rs.eof then
    strMonth = Month(now)+1
    response.redirect "?view="& strMonth &"&y="& Year(now) &""
end if
While Not Rs.eof
tekst = RS("tekst")
tekst = replace(tekst, vbcrlf, "<br>")
%>
    <div>
    <%=RS("day")%>/<%=RS("month")%>-<%=RS("year")%>

    <p><%=tekst%></p>
    </div>
       
<%
RS.movenext
wend
end if%>

<!-- ovenstående starter et loop der siger at hvis månede (strMonth) er tom, så kig i næste månede (strMonth+1) og fortsæt indtil der kommer indhold -->

Jeg har lagt hele kode, inklusiv forklaring, ud her: http://www.woopass.dk/kalenderloop.txt

Håber i kan hjælpe med en løsning! :-)
Avatar billede lazeric Nybegynder
21. december 2005 - 12:46 #9
Når i har set koden kan i måske bedre forstå hvad jeg mener.. det er egentlig ikke det While loop jeg vil have stoppet, men nærmere det har med at den bliver ved med at sige at hvis der ikke er noget i databasen fra denne månede (strMonth) så gå til næste månede og når den kommer til december går den så til den første månede i næste år... så den fortsætter og fortsætter i en uendelighed...

Dvs, internet explorer fortsætter til November 2010 og Firefox til April 2007 før de timer ud :-D
Avatar billede lazeric Nybegynder
22. december 2005 - 09:58 #10
Nå sku, jeg fandt selv ud af det :-)
Ellers tak for hjælpen!
Avatar billede saudoo Nybegynder
28. december 2005 - 12:55 #11
Hehe.. godt nok.. Du må undskylde.. jeg glemte alt om dit spørgsmål. Og fik underligt nok ingen mails fra eksperten.. :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester