Avatar billede lazeric Nybegynder
08. november 2006 - 19:48 Der er 8 kommentarer og
1 løsning

Loop problem til dropdown

Det går fint nok med at loope alt over i dropdown, men mit problem er er jeg vil vise årstal i dropdown. Så hvis der er 5 entries fra 2006 så kommer 2006 til at stå 5 gange i dropdown. Hvordan undgår jeg at den skriver mere end 1 gang?

Her er koden:
<form name="aar">
<select name="pageurl" class="knap" onChange="aarredirect();">
   
<%
    strSQL="Select * from sagsliste ORDER BY id DESC;"
    set rs = conn.execute(strSQL)
    Do until rs.eof
   
    response.write "<option value='?stats="& request("stats") &"&aar="& RS("aar") &"'>"& RS("aar") &"</option>"
   
    rs.movenext
    loop

    Conn.Close
    set Conn = Nothing
%>

</select>
</form>
Avatar billede madeindk Nybegynder
08. november 2006 - 19:53 #1
Du kan evt. prøve at bruge distinct, sådan her:

<form name="aar">
<select name="pageurl" class="knap" onChange="aarredirect();">
   
<%
    strSQL = "SELECT DISTINCT aar FROM sagsliste ORDER BY id DESC;"
    set rs = conn.execute(strSQL)
    Do until rs.eof
   
    response.write "<option value='?stats="& request("stats") &"&aar="& RS("aar") &"'>"& RS("aar") &"</option>"
   
    rs.movenext
    loop

    Conn.Close
    set Conn = Nothing
%>

</select>
</form>
Avatar billede thesurfer Nybegynder
08. november 2006 - 19:56 #2
Hvis du ikke kan bruge distinct, kan du programmere dig ud af problemet:

        listen = ""
    Do until rs.eof
   
    if instr(listen, rs("aar") & ",") = -1 then
        response.write "<option value='?stats="& request("stats") &"&aar="& RS("aar") &"'>"& RS("aar") &"</option>"
        listen = listen & rs("aar") & ","
    end if
   
    rs.movenext
    loop


Der skal muligvis stå "= 0" i stedet for "= -1" her:

    if instr(listen, rs("aar") & ",") = -1 then
Avatar billede madeindk Nybegynder
08. november 2006 - 19:59 #3
thesurfer -> Hvilken løsning er egentlig hurtigst at bruge? Havde ikke lige tænkt på din løsning nemlig og bruger også selv distinct på mit site.
Avatar billede thesurfer Nybegynder
08. november 2006 - 20:00 #4
Hmm.. kom i tanke om noget optimering..

Koden RS("aar") vil vel få den til at lave et opslag, i recordsettet, hver gang man bruge RS("aar")..

Derfor ville det være bedre, at gøre sådan her:
    Do until rs.eof
    aar = RS("aar")

    response.write "<option value='?stats="& request("stats") &"&aar="& aar &"'>"& aar &"</option>"
Avatar billede thesurfer Nybegynder
08. november 2006 - 20:01 #5
Jeg vil tro at distinct er bedre at bruge.. for der bliver dataene filtreret fra..

Uden distinct, skal serveren løbe igennem alle records OG lave en IF-statement på dem alle..

Så det ville nok være bedre med distinct..
Avatar billede thesurfer Nybegynder
08. november 2006 - 20:02 #6
PS:

Yderliger forbedringer:

Erstat request("stats") med den tilhørende hente metode..

Dvs
URL: request.querystring("stats")
FORM: request.form("stats")

Det anbefales også at putte "Option Explicit" som den første linie i dokumentet, og definere ALLE variablerne, via Dim Variabelnavn.. Så kan den fortælle dig, når du laver stavefejl..
Avatar billede thesurfer Nybegynder
08. november 2006 - 20:05 #7
Hver gang der bruges "set VariabelNavn = noget", skal man bruge "set VariabelNavn = nothing".. husk at gøre det i den rigtige rækkefølge, hvis flere variabler afhænger af hinanden..
Avatar billede lazeric Nybegynder
08. november 2006 - 20:08 #8
madeindk -> DISTINCT ser godt nok ud til at sætte min side i en koma tilstand? :-)

thesurfer -> det virker perfekt, med "0" istedet for "-1" ;-)
Og tak for optimeringsidéen!
Smid lige et svar så du kan få lidt point.
Avatar billede thesurfer Nybegynder
08. november 2006 - 20:08 #9
Roger that :-)
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