Avatar billede chrisrj Forsker
08. oktober 2002 - 23:11 Der er 23 kommentarer og
2 løsninger

Stort problem med script

Jeg har et dynamisk script til 2 dropdown boxe.

Det virker som sådan fint, men hvis id'et til indholdet i dropdown box 2 IKKE er fortløbende kan den ikke finde ud af det.

Jeg ved ikke meget forstand på java, bare så du/I ved det...

Her er mit script:

<%
    sqltest = "select count(maerkeid) as antal from maerke"
    Set rstest = Conn.Execute(SQLtest)
    antallet = rstest("antal") + 1
    response.write "afdelinger = new Array(" & antallet & ");"
%>
//Antallet af afdelinger + 1
for (i = 0; i < afdelinger.length; i++) afdelinger[i] = new Array();
afdelinger[0][0] = "Vælg Modeller";
<%
    sqltal1 = "select count(maerkeid) as antal from maerke"
    Set rstal = Conn.Execute(SQLtal1)
    antal = rstal("antal")
    for i=1 to antal
   
        sqltal2 = "select count(modelid) as antal2 from model where maerkeid=" & i
        Set rstal2 = Conn.Execute(SQLtal2)
        antal2 = rstal2("antal2")
       
        sql = "select model from model where maerkeid=" & i
        Set rs = Conn.Execute(SQL)
       
        for t=0 to antal2
            if not rs.eof then
                response.write "afdelinger["& i &"]["& t &"] = '" & rs("model") &"';" & vbCrLf
                rs.movenext
            end if
            'rs.movefirst
        next
        rs.close
        't = 0
    next
%>


function skift(frm) {
ind = frm.maerke.selectedIndex;
frm.model.length = afdelinger[ind].length;
for (n = 0; n < afdelinger[ind].length; n++) {
frm.model.options[n].text = afdelinger[ind][n];
frm.model.options[n].value = afdelinger[ind][n];
}
}
</script>


Og her er dropdown box 2:

<select name="model" style="width:160px;background-color:white">
<option value="[Alle modeller]">Vælg Modeller</option>
</select><br><br>Årgang fra
<select name="aar_start" style="width:60px;background-color:white">
<%
    sql = "select * from aar"
    Set es = Conn.Execute(SQL)
    es.movenext
    do while not es.eof
        response.write "<option value='"& es("db") &"'>" & es("aar") & "</option>" & vbCrLf
    es.movenext
    loop
%>
</select>

Jeg har virkelig brug for hjælp til dette!!
Avatar billede amerikaner Nybegynder
09. oktober 2002 - 08:51 #1
OK, maybe I'll give it a shot but I have to learn my new danish word for the day.  Hvad betyder 'fortløbende'?
Avatar billede chrisrj Forsker
09. oktober 2002 - 09:15 #2
Fortløbende = f.eks. en række tal, det vil sige : 1,2,3,4,5,6...

ikke fortløbende = 1,3,4,6,8

Forstår du?
Avatar billede chrisrj Forsker
09. oktober 2002 - 09:19 #3
I min dansk/engelsk ordbog står der :

"Fortløbende : 1. consecutive (fx numbers)"
Avatar billede ras2000 Nybegynder
09. oktober 2002 - 10:01 #4
Prøv at lægge koden for den viste side ind, altså vis siden i browseren, vælg vis koden, tryk ctrl a, ctrl c, og paste det herind, så er det lidt nemmere at overskue hvad der kommer ud.
Avatar billede chrisrj Forsker
09. oktober 2002 - 10:35 #5
ok, her er det:

<script>
afdelinger = new Array(8);
//Antallet af afdelinger + 1
for (i = 0; i < afdelinger.length; i++) afdelinger[i] = new Array();
afdelinger[0][0] = "Vælg Modeller";
afdelinger[1][0] = '[Alle modeller]';
afdelinger[2][0] = '[Alle modeller]';
afdelinger[2][1] = '145';
afdelinger[2][2] = '146';
...
...
...
afdelinger[5][27] = 'M3';
afdelinger[5][28] = 'M5';
afdelinger[5][29] = 'X5';
afdelinger[5][30] = 'Z3';
afdelinger[6][0] = '[Alle modeller]';
afdelinger[6][1] = 'Kadett';
afdelinger[6][2] = 'Ascona';



function skift(frm) {
ind = frm.maerke.selectedIndex;
frm.model.length = afdelinger[ind].length;
for (n = 0; n < afdelinger[ind].length; n++) {
frm.model.options[n].text = afdelinger[ind][n];
frm.model.options[n].value = afdelinger[ind][n];
}
}
</script>


<form action="index.asp?page=soegeresultat.asp" method="post">
<select name="maerke" onChange="skift(this.form);" style="width:160px;background-color:white">
<option value="[Alle Maerker]">Vælg mærke</option>
<option value='[Alle maerker]'>Alle mærker</option>
<option value='[Alfa Romeo]'>Alfa Romeo</option>
<option value='[Aston Martin]'>Aston Martin</option>
<option value='[Audi]'>Audi</option>
<option value='[BMW]'>BMW</option>
<option value='[Opel]'>Opel</option>
<option value='[detteeretmaerke]'>detteeretmaerke</option>

</select><br><br>
<select name="model" style="width:160px;background-color:white">
<option value="[Alle modeller]">Vælg Modeller</option>
</select><br><br>Årgang fra
<select name="aar_start" style="width:60px;background-color:white">
<option value='2002'>2002</option>
...
...
...


Problemet er select "maerke" og "model"
Avatar billede chrisrj Forsker
09. oktober 2002 - 10:39 #6
Der skulle så være noget mere efter det her:

afdelinger[6][0] = '[Alle modeller]';
afdelinger[6][1] = 'Kadett';
afdelinger[6][2] = 'Ascona';


Der skulle være en linie i stil med dette:

afdelinger[7][0] = '[Alle modeller]';

Problemet er bare at id'et i db'en ikke er 7 men 16. Og nej, det kan ikke "bare" ændres, da det SKAL være muligt slette og tilføje hele tiden.
Avatar billede ras2000 Nybegynder
09. oktober 2002 - 11:01 #7
Godt, nu tror jeg jeg er med. Du laver et array, der er helt hulter til bulter. Hvad er grunden til det? I din kode kommer de jo fortløbende, for i = 0... og for t = 0..., det burde da ikke give huller i talrækken.
Avatar billede chrisrj Forsker
09. oktober 2002 - 11:06 #8
Nej, men i db'en id'erne sådan her 1,2,3,4,5,6,16

Den tager ikke det sidste med, hvorfor gør den ikke det?
Avatar billede ras2000 Nybegynder
09. oktober 2002 - 11:22 #9
Jamen det er jo et asp problem, ikke javascript. Jeg skal nok vide lidt mere om din database, for at hjælpe dig, men jeg kan se at du kalder
sql = "select model from model where maerkeid=" & i
hvor i er fortløbende. Derfor vil den kun tage de fortløbende.
Så vidt jeg kan se, har du to tabeller, en der hedder maerke og en der hedder model. De hænger sammen med modelid. Det du skal have er en løkke der går alle dine maerker igennem, og for hver mærke, går alle de tilhørende modeller igennem. Altså noget i retning af:
i = 0
t = 0
sql = "select * from maerke"
set rs1 = conn(sql)
response.write "afdelinger[" & i & "][0] = 'alle modeller';" & vbCrLf
i = i + 1
do while not rs1.eof
sql1 = "select * from model where id = " & rs1(0)
set rs2 = conn(sql)
do while not rs2.eof
response.write "afdelinger[" & i & "][" & t & "] = '" & rs2("modelnavn")';" & vbCrLf
t = t + 1
loop
loop
Jeg skal kunne se dine tabeller, for at vide om jeg har brugt de rigtige kolonner osv, men jeg håber du kan se ideen.
Avatar billede chrisrj Forsker
09. oktober 2002 - 11:41 #10
Jeg tror du har fat i det rigtige... jeg prøver det lige...
Avatar billede chrisrj Forsker
09. oktober 2002 - 11:48 #11
Der kommer en fejl:

Elementet kan ikke findes i den samling, der svarer til det anmodede navn eller ordenstal.
/bilside/www/sog.asp, line 24

linie 24:
response.write "afdelinger[" & i & "][" & t & "] = '" & rs2("model")';" & vbCrLf

Kolonnenavnet er korrekt.

Kan det have noget at gøre med "rs1(0)" i "sql1 = "select * from model where id = " & rs1(0)"?
Avatar billede ras2000 Nybegynder
09. oktober 2002 - 11:51 #12
Jo, jeg gik udfra at rs1(0) var dit id, det plejer at være den første kolonne. Men det er jo svært at gætte sig til hvordan dine tabeller ser ud.
Avatar billede chrisrj Forsker
09. oktober 2002 - 11:56 #13
ok, jeg kendte ikke den måde at angive kolonner. Der lærte jeg noget nyt... :)

Mine tabeller ser således ud:

maerke:

maerkeid,maerke,db

model:

modelid,model,maerkeid

Jeg har lavet en relation mellem maerke.maerkeid og model.maerkeid ( 1 til mange )
Avatar billede chrisrj Forsker
09. oktober 2002 - 11:58 #14
Min kode ser nu sådan ud:

<%
    i = 0
    t = 0
    sql = "select * from maerke"
    set rs1 = conn.Execute(sql)
    response.write "afdelinger[" & i & "][0] = 'alle modeller';" & vbCrLf
    i = i + 1
    do while not rs1.eof
        sql1 = "select * from model where maerkeid = " & rs1(2)
        set rs2 = conn.Execute(sql)
        do while not rs2.eof
            response.write "afdelinger[" & i & "][" & t & "] = '" & rs2("model")';" & vbCrLf
            t = t + 1
        rs2.movenext
        loop
    rs1.movenext
    loop
%>

Det giver dog stadig samme fejl...
Avatar billede ras2000 Nybegynder
09. oktober 2002 - 12:02 #15
Prøv at lægge hele koden for siden ind her, så må jeg lige se hvad det er der sker. Altså koden der bliver genereret, ikke den du selv skriver.
Avatar billede chrisrj Forsker
09. oktober 2002 - 12:03 #16
Jeg har lige rettet et par små fejl.

Nu virker siden, men. Prøv at se her:

afdelinger[0][0] = "Vælg Modeller";
afdelinger[0][0] = 'alle modeller';
afdelinger[1][0] = '[Alle modeller]';
afdelinger[1][1] = '[Alle modeller]';
afdelinger[1][2] = '145';
afdelinger[1][3] = '146';
afdelinger[1][4] = '147';
afdelinger[1][5] = '155';
afdelinger[1][6] = '156';
afdelinger[1][7] = '164';
afdelinger[1][8] = '166';
...
...
...
afdelinger[1][55] = 'M5';
afdelinger[1][56] = 'X5';
afdelinger[1][57] = 'Z3';
afdelinger[1][58] = '[Alle modeller]';
afdelinger[1][59] = 'Kadett';
afdelinger[1][60] = 'Ascona';
afdelinger[1][61] = '[Alle Modeller]';

Kan du se problemet?

Hint: "afdelinger[1]"
Avatar billede ras2000 Nybegynder
09. oktober 2002 - 12:04 #17
Denne linie skulle dog ændres
        set rs2 = conn.Execute(sql)
til
        set rs2 = conn.Execute(sql1)
Avatar billede chrisrj Forsker
09. oktober 2002 - 12:06 #18
ja, det fandt jeg også ud af... :)
Avatar billede ras2000 Nybegynder
09. oktober 2002 - 12:06 #19
Prøv det her:
<%
    i = 0
    t = 0
    sql = "select * from maerke"
    set rs1 = conn.Execute(sql)
    do while not rs1.eof
        response.write "afdelinger[" & i & "][0] = 'alle modeller';" & vbCrLf
        i = i + 1
        sql1 = "select * from model where maerkeid = " & rs1(2)
        set rs2 = conn.Execute(sql)
        do while not rs2.eof
            response.write "afdelinger[" & i & "][" & t & "] = '" & rs2("model")';" & vbCrLf
            t = t + 1
        rs2.movenext
        loop
    rs1.movenext
    t = 0
    loop
%>
Avatar billede ras2000 Nybegynder
09. oktober 2002 - 12:09 #20
Jeg kan ikke lige gennemskue om response.write "afdelinger[" & i & "][0] = 'alle modeller';" & vbCrLf skal stå der eller ej. Det må du lige prøve dig frem med.
Avatar billede chrisrj Forsker
09. oktober 2002 - 12:12 #21
Stort!!!!! det spiller 100%!!!!!!

Jeg takker rigtig mange gange!!!!

Lig lige et svar, så kan du få dine velfortjente points!!! :D:D:D:D
Avatar billede ras2000 Nybegynder
09. oktober 2002 - 12:44 #22
Svar.
Men du behøver altså ikke give 200 point for det, så svært er det jo heller ikke. 100 er i hvert fald mere end rigeligt.
Avatar billede ras2000 Nybegynder
09. oktober 2002 - 12:44 #23
Hovsa
Avatar billede chrisrj Forsker
09. oktober 2002 - 12:51 #24
:) så siger 100
Avatar billede chrisrj Forsker
09. oktober 2002 - 12:51 #25
og 100 til mig. :)
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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