05. maj 2006 - 22:53Der er
60 kommentarer og 1 løsning
Hjælp med array
Haster lidt...
Jeg har denne kode som jeg ikke kan få til at virke : do while not rs.eof 'Looping rows iString = rs("Date") If iString <> "" Then i = i + 1 Antal = CInt(i) ReDim Dato(i) Dato(Antal) = rs(Antal) Response.Write "<td width=42 Class=RammeKolonnerHTB><img src=images/sp.gif width=42 height=1><br>" & iString & "</td>" End If rs.MoveNext Loop
Og dette output : Antal=4 Dato1 Dato2 Dato3 Dato4 13.12
Hvorfår er der ingen datoer ud for dato1, dato2 og dato3 ?
Den ser ikke helt rigtig ud, den her Dato(Antal) = rs(Antal) Hvorfor tager du først felt 1, så felt 2, så 3, osv. i dit recordsæt? Du skal vel altid aflæse det samme felt, men i forskellige rækker. Det med rækker tager rs.MoveNext sig jo af.
Jeg henter datoer fra en kolonne i db'en, men vil have dem skrevet på en linje.
Sådan her: 20.07|10.08|06.10|13.12|Dato|Dato|Dato|Dato|Dato|Dato Navn 1 X Navn 2 X Navn 3 Navn 4 X o.s.v
Det virker fint, men jeg ønsker at "notere" placeringen af krydset, f.eks at 20.07 har plads 1, 06.10 har plads 3, men samtidig også have Navnet på personen. Jeg troede bare man kunne putte begge ting ind i et array og så skrive det ud senere. Kan man ikke det ?
Ja, i princippet kan man gøre alt, Men jeg (vi?) kan ikke gennemskue hvad du er ude på ud fra din forklaring. Hvad står der fx i din tabel/tabeller? Hvad er din sql-sætning? Hvad skal du have ud?
i = 0 j = 0 do while not rs.eof 'Looping rows iString = rs("Date") If iString <> "" Then i = i + 1 Antal = CInt(i) ReDim Dato(Antal) Dato(Antal) = rs(Antal) Response.Write "<td width=42 Class=RammeKolonnerHTB><img src=images/sp.gif width=42 height=1><br>" & iString & "</td>" End If rs.MoveNext Loop
j = 9 For k = i to j Response.Write "<td width=42 Class=RammeKolonnerHTB><img src=images/sp.gif width=42 height=1><br>Dato</td>" Next
Response.Write "Antal=" & Antal & "<br>"
For i = 1 to Antal Response.Write "Dato" & i & " " & Dato(i) & "<br>" Next
rs.close() Set rs = Nothing
Laver dette output: 20.07|10.08|06.10|13.12|Dato|Dato|Dato|Dato|Dato|Dato
Denne kode: <!-- ///////////////// Navneliste sektion ///////////////// --> <% 'Create object for the recordset Set rs = Server.CreateObject("ADODB.RecordSet")
row=0 do while(row<=max) 'Looping rows Response.Write "<tr>" Response.Write "<td width=180 height=18 Class=RammeKolonnerVHB><img src=images/sp.gif width=180 height=1><br>" & rsarr(2,row) & " " & rsarr(3,row) & "</td>" If rsarr(4,row) <> "" Then For i = 1 to 10 Response.Write "<td width=42 Class=RammeKolonnerHB><img src=images/sp.gif width=42 height=1><br>" & "X" & "</td>" Next Else Response.Write "<td width=42 Class=RammeKolonnerHB><img src=images/sp.gif width=42 height=1><br>" & "Y" & "</td>" End If row = row + 1 Response.Write "</tr>" Loop
rs.close() Set rs = Nothing
Laver dette output: Navn1 og sætter et kryds ud for den dato personen har afholdt et møde f.eks. Navn2 denne person har ikke afholdt noget møde så der er alle felter tomme Navn3 Sætter igen kryds ud for den dato personen har afholdt et møde og tomme felter hvis han ikke har haft afholdt et møde. o.s.v.
Det er det jeg prøver at skildre længere oppe med krydserne.
db'en indeholder bare fornavn, efternavn og et tekstfelt der indeholder en dato ( 20.07 )
Det jeg skal have ud er en person og et kryds ud for den viste dato, hvis personen har afholdt et møde. Hvis han ikke har afholdt et møde er der bare blanke felter over hele rækken.
Du må sige til hvis jeg skal prøve at forklare det anderledes.
I løkken For i = 10 i nederste del af koden skulle jeg gerne kunne vælge om der skal sættes et kryds eller om der bare skal lave et blankt felt. Lige nu laver den bare 10 krydser.
Erik >> Ja det er rigtigt. Mente bare det vare irrelevant lige for dette problem. Nej man kan kun holde et møde. Ja man står i tabellen, men med tomme felter ( altså intet kryd ud for en dato )
"Ja man står i tabellen, men med tomme felter ( altså intet kryd ud for en dato )" - der er vel ingen krydser i Vaertskaebertabellen. Spørgsmålet er om man står i Vaertskaebertabellen hvis man ikke har holdt møder?
Din for skal så vidt jeg kan se gå fra 0 til ubound på Dato()
For i = 1 to 10 Response.Write "<td width=42 Class=RammeKolonnerHB><img src=images/sp.gif width=42 height=1><br>" & "X" & "</td>" Next
Sådan her i stil med dette og så kun udskrive X hvis Dato(i) 0 rsarr(4,x)
For i = 0 to ubound(Dato) if Dato(i) = rsarr(4,x) then Response.Write "<td width=42 Class=RammeKolonnerHB><img src=images/sp.gif width=42 height=1><br>" & "X" & "</td>" else Response.Write "<td width=42 Class=RammeKolonnerHB></td>" end if Next
ok det var kun den ene del det er vist alle disse linie:
If rsarr(4,row) <> "" Then For i = 1 to 10 Response.Write "<td width=42 Class=RammeKolonnerHB><img src=images/sp.gif width=42 height=1><br>" & "X" & "</td>" Next Else Response.Write "<td width=42 Class=RammeKolonnerHB><img src=images/sp.gif width=42 height=1><br>" & "Y" & "</td>" End If
som skal rettes:
For i = 0 to ubound(Dato) If Dato(i) = rsarr(4,row) Then Response.Write "<td width=42 Class=RammeKolonnerHB><img src=images/sp.gif width=42 height=1><br>" & "X" & "</td>" Else Response.Write "<td width=42 Class=RammeKolonnerHB><img src=images/sp.gif width=42 height=1><br>" & "Y" & "</td>" End If Next
Her kan i se hvordan det er tænkt det skal se ud, selvfølgelig ikke med kryds i alle felter, men kun i et, hvis der er afholdt et møde hos den person. http://www.bodygym.dk/test
' eagleeye's kode indsat - start x = row For i = 0 to ubound(Dato) If Dato(i) = rsarr(4,row) Then Response.Write "<td width=42 Class=RammeKolonnerHB><img src=images/sp.gif width=42 height=1><br>" & "X" & "</td>" Else Response.Write "<td width=42 Class=RammeKolonnerHB><img src=images/sp.gif width=42 height=1><br>" & "Y" & "</td>" End If Next ' eagleeye's kode indsat - slut
Jo, men der er åbenbart noget jeg ikke har forstået helt, da jeg ikke kan gennemskue det med array og stadig har problemer med at få vist det rigtigt. Tro mig, jeg ville ikke sidde og spørge om disse ting hvis jeg selv var en haj til det med array ;-)
' eagleeye's kode indsat - start x = row For i = 0 to ubound(Dato) If Dato(i) = rsarr(4,row) Then Response.Write "<td width=42 Class=RammeKolonnerHB><img src=images/sp.gif width=42 height=1><br>" & "X" & "</td>" Else Response.Write "<td width=42 Class=RammeKolonnerHB><img src=images/sp.gif width=42 height=1><br>" & "Y" & "</td>" End If Next ' eagleeye's kode indsat - slut
'Fyld Tomme felter ind, jeg ved ikke om det skal være X eller Y?? For ubound(Dato)+1 to 10 Response.Write "<td width=42 Class=RammeKolonnerHB><img src=images/sp.gif width=42 height=1><br>" & "X" & "</td>" Next
eagleeye >> hvad mener du : For ubound(Dato)+1 to 10 ? Jeg har prøvet : For ubound(Dato) = 1 to 10 - virker ikke prøvede også : For ubound(Dato)+1 = 1 to 10 - virkede heller ikke
Ja, men med denne fejl : Microsoft VBScript compilation (0x800A0410) Invalid 'for' loop control variable /vl10/Vaertskaber.asp, line 301, column 16 For ubound(Dato)+1 to 10 ---------------^
PS: Jeg har fjernet alle "Y"'er og ladet "X"'er være, så der skal i princippet kun være 4 "X"'er i de 4 første kolonner, hvor der er en dato, resten skal være tomme.
Prøv at rette koden fra 06/05-2006 00:54:03 til dette:
do while(row<=max) 'Looping rows Response.Write "<tr>" Response.Write "<td width=180 height=18 Class=RammeKolonnerVHB><img src=images/sp.gif width=180 height=1><br>" & rsarr(2,row) & " " & rsarr(3,row) & "</td>" ' eagleeye's kode indsat - start For i = 1 to ubound(Dato) If Dato(i) = rsarr(4,row) Then Response.Write "<td width=42 Class=RammeKolonnerHB><img src=images/sp.gif width=42 height=1><br>" & "X" & "</td>" Else Response.Write "<td width=42 Class=RammeKolonnerHB></td>" End If Next ' eagleeye's kode indsat - slut
'Fyld Tomme felter ind, jeg ved ikke om det skal være X eller Y?? iStart = ubound(Dato) if iStart = 0 then iStart = 1 For i = iStart to 10 Response.Write "<td width=42 Class=RammeKolonnerHB><img src=images/sp.gif width=42 height=1></td>" Next
Det bliver jo ikke mere korrekt på den måde. Du skal enten bruge preserve, med den rettelse som er i mit link ovenfor - eller allokere arrayet med korrekt størrelse inden din løkke.
For i = 0 to ubound(Dato) If Dato(i) = rsarr(4,row) Then Response.Write "<td width=42 Class=RammeKolonnerHB><img src=images/sp.gif width=42 height=1><br>" & "X" & "</td>" Else Response.Write "<td width=42 Class=RammeKolonnerHB><img src=images/sp.gif width=42 height=1><br>" & " " & "</td>" End If Next
Nej det har du ret i, men jeg har siddet kigget lidt på den kode som Erik henviser til og har endelig fundet ud af det, som du kan se på den på http://www.bodygym.dk/test. Som du også kan se er der stadig lidt der skal rettes til.
i = 0 j = 0 do while not rs.eof 'Looping rows iString = rs("Date") If iString <> "" Then i = i + 1 Antal = CInt(i) ReDim Dato(Antal) Dato(Antal) = rs(Antal) Response.Write "<td width=42 Class=RammeKolonnerHTB><img src=images/sp.gif width=42 height=1><br>" & iString & "</td>" End If rs.MoveNext Loop
j = 9 For k = i to j Response.Write "<td width=42 Class=RammeKolonnerHTB><img src=images/sp.gif width=42 height=1><br>Dato</td>" Next
rs.close() Set rs = Nothing
Og så koden der udskriver navne og sætter "X" på de rigtige steder.
<!-- ///////////////// Navneliste sektion ///////////////// --> <% 'Create object for the recordset Set rs = Server.CreateObject("ADODB.RecordSet")
i = 0 j = 0 Redim Dato(0) do while not rs.eof 'Looping rows iString = rs("Date") If iString <> "" Then i = i + 1 Antal = CInt(i) ReDim preserve Dato(Antal)
'Erik's ændring Dato(Antal) = iString
'Dato(Antal) = rs(Antal) Response.Write "<td width=42 Class=RammeKolonnerHTB><img src=images/sp.gif width=42 height=1><br>" & iString & "</td>" End If rs.MoveNext Loop
j = 9 For k = i to j Response.Write "<td width=42 Class=RammeKolonnerHTB><img src=images/sp.gif width=42 height=1><br>Dato</td>" Next
rs.close() Set rs = Nothing
Og så koden der udskriver navne og sætter "X" på de rigtige steder.
'Create object for the recordset Set rs = Server.CreateObject("ADODB.RecordSet")
<% do while(row<=max) 'Looping rows Response.Write "<tr>" Response.Write "<td width=180 height=18 Class=RammeKolonnerVHB><img src=images/sp.gif width=180 height=1><br>" & rsarr(2,row) & " " & rsarr(3,row) & "</td>" ' eagleeye's kode indsat - start For i = 1 to ubound(Dato) If Dato(i) = rsarr(4,row) Then Response.Write "<td width=42 Class=RammeKolonnerHB><img src=images/sp.gif width=42 height=1><br>" & "X" & "</td>" Else Response.Write "<td width=42 Class=RammeKolonnerHB></td>" End If Next ' eagleeye's kode indsat - slut
'Fyld Tomme felter ind, jeg ved ikke om det skal være X eller Y?? iStart = ubound(Dato) if iStart = 0 then iStart = 1 For i = iStart to 10 Response.Write "<td width=42 Class=RammeKolonnerHB><img src=images/sp.gif width=42 height=1></td>" Next
Her er de to rettelser der skulle til. Linje 6 rettet til sidst i linjen. For i = 1 to ubound(Dato) If Dato(i) = rsarr(4,row) Then Response.Write "<td width=42 Class=RammeKolonnerHB><img src=images/sp.gif width=42 height=1><br>" & "X" & "</td>" Else Response.Write "<td width=42 Class=RammeKolonnerHB>" & " " & "</td>" End If Next
Linje 3 rettet fra 10 til 9 iStart = ubound(Dato) if iStart = 0 then iStart = 1 For i = iStart to 9 Response.Write "<td width=42 Class=RammeKolonnerHB><img src=images/sp.gif width=42 height=1></td>" Next
Tak til jer begge for at have tålmodighed med mig, det var en hård en at knække. Jeg lærer nok det med array en dag ;-)
eagleeye >> da Erik ikke samler på point så må du lige komme med et svar så du kan få de velfortjente point.
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.