Avatar billede george Nybegynder
17. april 2006 - 15:57 Der er 15 kommentarer og
1 løsning

Subscript out of range: 'i'

Jeg har lavet lidt kode der henter nogle værdier fra en DB og ligger dem i et array.

        'Get the data from the DB into an array, for performance.
        if NOT rs.EOF then
            myArray = rs.GetRows()
            max = UBound(myArray)
        end if
       
        'Closing database, we don't need it anymore - we have the info in the array
        rs.close()
        Set rs = Nothing
       
        Response.Write max & "<br>"
        For I = 0 to max
            For J = 4 to 13
                If myArray(J,I) <> "" Then
                    Data = Right(myArray(J,I), 2)
                    Response.Write Data & "<br>"
                End If
            Next
        Next

Hvorfår for jeg denne fejl:
Ubound = 13
12
08
07
10

Microsoft VBScript runtime error '800a0009'

Subscript out of range: 'i'

/test_environment/vl10_array_test.asp, line 75
Avatar billede george Nybegynder
17. april 2006 - 16:02 #1
Ups! linje Response.Write max & "<br>" skal selvf&oslash;lgelig se s&aring;dan ud : Response.Write "Ubound = " & max & "<br>"
Avatar billede cyberkox Nybegynder
17. april 2006 - 16:02 #2
Hvordan ser udtrækket fra db'en ud ? Eksempelvis ?
Avatar billede george Nybegynder
17. april 2006 - 16:08 #3
Den ser sådan ud:
10.12
11.07
08.08
21.10

Det undre mig at Ubound(myArray) giver 13 da det skulle blive 140 efter mine beregninger. 10 rækker a 14 felter i DB'en
Avatar billede george Nybegynder
17. april 2006 - 16:10 #4
fik lige byttet rundt på 11.07, 08.08 skulle have været omvendt.
Avatar billede busschou Praktikant
17. april 2006 - 17:25 #5
hvad er det præcis du vil have ud?
Du skal tænke på der er forskel på ubound(myArray) og ubound(myArray,2)
myArray er jo et todimensionelt array, første del siger noget om hvor mange felter du har...du siger du har 14, det passer også med at ubound giver 13 for du skal jo tælle "nul" med.
Læs evt artiklen her
http://activedeveloper.dk/artikler/default.asp?articleid=176
Avatar billede busschou Praktikant
17. april 2006 - 17:29 #6
så afhængig af hvad det er du vil  have så kunne du gøre sådan her
....
For I = 0 to max
            For J = 0 to ubound(myArray,2)
                If myArray(I,J) <> "" Then
                    Data = Right(myArray(I,J), 2)
                    Response.Write Data & "<br>"
                End If
            Next
        Next
Avatar billede george Nybegynder
17. april 2006 - 17:40 #7
Ja jeg kender godt artiklen og har også læst den et par gange, men syntes ikke at den fortalte mig, som du nu gør, at det er antal felter pr/linje den tæller, jeg mente at det var total antal "felter" i mit array.

Det jeg er ude på er at få datoen eks. 10.12 ud og barbere "10." (Data = Right(myArray(J,I), 2)) væk så jeg kun har måneden tilbage. Men som i kan se får jeg
Subscript out of range: 'i'
Avatar billede busschou Praktikant
17. april 2006 - 17:43 #8
Det gør du fordi du skriver J,I og ikke I,J...I er dit andet indeks
Avatar billede busschou Praktikant
17. april 2006 - 17:44 #9
vrøvl første indeks
Avatar billede busschou Praktikant
17. april 2006 - 17:45 #10
prøv evt udskrive ubound(myArray) og ubound(myArray,2) og så bagefter kør en løkke med de to...så kan du jo se hvor store dimensionerne er :o)
Avatar billede george Nybegynder
17. april 2006 - 17:47 #11
Det er lidt tricky, jeg har kun brug for at checke på felt 4 til 13( ikke 0,1,2,3 )
Avatar billede busschou Praktikant
17. april 2006 - 17:49 #12
hvad så med
Response.Write max & "<br>"
        For I = 4 to max
            For J = 0 to ubound(myarray,2)
                If myArray(I,J) <> "" Then
                    Data = Right(myArray(I,J), 2)
                    Response.Write Data & "<br>"
                End If
            Next
        Next
Avatar billede george Nybegynder
17. april 2006 - 17:50 #13
Prøver lige at se om jeg kan få det til at virke. Jeg kan se at jeg roder lidt rundt i index'ene. Jeg vender tilbage . . .
Avatar billede busschou Praktikant
17. april 2006 - 17:51 #14
det er jo lige det med om det er I eller J som skal stå først,,, og når index er out of bounce...så er det fordi du har byttet om på dem
Hvis I er større end J og du bytter om så er det derfor det går galt...tilsvarende omvendt
Avatar billede george Nybegynder
23. april 2006 - 17:06 #15
Hej busschou, undskyld ventetiden. Jeg har lige haft 2 vira jeg ikke kunne komme af med, og nu hvor de er væk kan jeg konstaterer at der er flere ting på min computer der ikke virker mere. Bl.a koden ovenfår virker ikke i min browser så jeg har måttet rykke det hele over på en anden maskine og her virker det. Koden kom til at se sådan ud:

        For I = 0 to Max
            For J = 4 to 13
                If myArray(J,I) <> "" Then
                    Data = Right(myArray(J,I), 2)
                    Response.Write Data & " "
                    Response.Write myArray(2,I) & " " & myArray(3,I) & "<br>"
                End If
            Next
            'Response.Write "<br>"
        Next

Hvis du lige smider et svar så er der point til dig. Tak for hjælpen.
Avatar billede busschou Praktikant
23. april 2006 - 17:18 #16
ikke godt med vira
men godt det ellers virker :o)
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