Avatar billede mrjowns Novice
05. juli 2005 - 13:40 Der er 8 kommentarer og
1 løsning

Fatter ikke arrays

Jeg har et 2 dimensionelt array, som jeg skal fylde med data fra en database og så skrive det ud. Kan nogen hjælpe?

Set rs = conn.execute("SELECT id, fld_project FROM tbl_projects ORDER BY fld_project")

arrCount = 0
Dim arrProjects

Do While Not rs.EOF
  arrProjects[arrCount,0] = rs("fld_project")
  arrProjects[arrCount,1] = rs("id")
  arrCount = arrCount + 1
rs.MoveNext
Loop

rs.close
set rs = nothing

---

<%
For i = LBound(arrProjects) To UBound(arrProjects)
  response.Write "<option value=""" & arrProjects(i,1) & """>" & arrProjects(i,0) & "</option>"
Next
%>

---

Microsoft VBScript runtime error '800a000d'
Type mismatch
/xxx/Default.asp, line 22

---

Linie 22 er:

  arrProjects[arrCount,0] = rs("fld_project")


Håber nogen kan hjælpe mig med at få det til at spille!
Avatar billede fennec Nybegynder
05. juli 2005 - 13:58 #1
Du skal til at bruge redim med Preserve:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/vsstmRedim.asp

Dim arrProjects
ReDim arrProjects(0,1)
Do While Not rs.EOF
  ReDim Preserve arrProjects(arrCount,1)
  arrProjects(arrCount,0) = rs("fld_project")
  arrProjects(arrCount,1) = rs("id")
  arrCount = arrCount + 1
rs.MoveNext
Loop

Jeg har dog problemer med at få Preserve til at fungere (får en "Subscript out of range" fejl). Hvis jeg fjerne den virker det, men så husker den ikke de tidligere oplysninger, og derfor er der kun data i den sidste række, så det er ret vigtig at have den med.
Avatar billede mrjowns Novice
05. juli 2005 - 14:05 #2
Ja, jeg får samme fejl "Subscript out of range" og det virker også hvis "Preserve" fjernes... Men det løser jo ikke helt problemet. Jeg får kun 1 række ud! Ved du hvordan jeg får rettet den fejl?
Avatar billede fennec Nybegynder
05. juli 2005 - 14:13 #3
Har lige fundet forklaringen.

I et multidim array kan man kun ReDim med Preserve på den sidste dimesion.
Virker:
ReDim arrProjects(10,10)
ReDim Preserve(10,20)

Virker ikke
ReDim arrProjects(10,10)
ReDim Preserve(20,10)

Vi skal altså bare bytte om på dimisionerne:
Dim arrProjects
Do While Not rs.EOF
  ReDim Preserve arrProjects(1,arrCount)
  arrProjects(0,arrCount) = rs("fld_project")
  arrProjects(1,arrCount) = rs("id")
  arrCount = arrCount + 1
rs.MoveNext
Loop
Avatar billede fennec Nybegynder
05. juli 2005 - 14:18 #4
Det betyder så også at du skal ændre din udskrivning, så lBound og ubound kører på 2. dimension:

For i = LBound(arrProjects,2) To UBound(arrProjects,2)
  response.Write "<option value=""" & arrProjects(1,i) & """>" & arrProjects(0,i) & "</option>"
Next
Avatar billede mrjowns Novice
05. juli 2005 - 14:24 #5
Nu ser min kode sådan ud:

Dim arrProjects
Do While Not rs.EOF
  ReDim Preserve arrProjects(1,arrCount)
  arrProjects(0,arrCount) = rs("fld_project")
  arrProjects(1,arrCount) = rs("id")
  arrCount = arrCount + 1
rs.MoveNext
Loop

og jeg får denne fejl:

Microsoft VBScript runtime error '800a000d'
Type mismatch
/xxx/Default.asp, line 23

Linie 23: arrProjects(0,arrCount) = rs("fld_project")
Avatar billede fennec Nybegynder
05. juli 2005 - 14:34 #6
Der skal lige en ReDim med ind, også en arrCount, hvis du ikke allerede har den:

Dim arrProjects
redim arrProjects(1,0)
arrCount = 0
Do While Not rs.EOF
  ReDim Preserve arrProjects(1,arrCount)
  arrProjects(0,arrCount) = rs("fld_project")
  arrProjects(1,arrCount) = rs("id")
  arrCount = arrCount + 1
rs.MoveNext
Loop
Avatar billede mrjowns Novice
05. juli 2005 - 14:48 #7
Coool enough! Der var den! ;)

Laver du et svar, fennec! Så er der point! Tak for hjælpen!
Avatar billede fennec Nybegynder
05. juli 2005 - 14:54 #8
Så har jeg også fundet ud af, hvorfor den laved den Preserve fejl. Jeg troede egentlig at det var en server fejl, så jeg har altid fundet andre metoder til at løse en problemstilling med når Preserve fejlede. Man skal jo også lære noget nyt hver dag :o)

.o) <-- One Eyed Jack
Avatar billede busschou Praktikant
08. juli 2005 - 08:47 #9
mrjowns >> Du virker stadig aktiv, kan du ikke kigge på dine gamle spørgsmål og lukke dem du har løst? , i al fald dem jeg er med i :o) http://www.eksperten.dk/spm/606687
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