Avatar billede kagge Nybegynder
27. september 2003 - 12:00 Der er 13 kommentarer og
2 løsninger

Dynamisk variabel

Hvordan opretter jeg en dynamisk variabel? Hvis strSQLkval feks finder 5 poster og jeg så vil have lagt dem ud i variabler som hedder kvalifikation1, kvalifikation2, kvalifikation3, kvalifikation4, kvalifikation5.

Jeg har bygget det op på denne måde, men ved ikke om jeg er inde på noget af det rígtige (det virker i hvert fald ikke) :(

recordSet24.Open strSQLkval, forbindelse, adOpenStatic, adLockReadOnly, adCmdText

a = 1

do while not recordSet24.eof

kvalifikation & a = recordSet24("Kvalid")
kval_startdato & a = recordSet24("Startdato")
kval_slutdato & a = recordSet24("Slutdato")

recordSet24.movenext
a = a + 1
loop
Avatar billede mm12010 Nybegynder
27. september 2003 - 12:08 #1
Dim kvalifikation, kval_startdato,kval_slutdato
kvalifikation = Array()
kval_startdato = Array()
kval_slutdato = Array()
a = 0

do while not recordSet24.eof

kvalifikation(a) = recordSet24("Kvalid")
kval_startdato(a) = recordSet24("Startdato")
kval_slutdato(a) = recordSet24("Slutdato")

recordSet24.movenext
a = a + 1
loop
Avatar billede kagge Nybegynder
27. september 2003 - 12:30 #2
=> mm12010

Får denne fejl:

Microsoft VBScript runtime error '800a0009'

Subscript out of range: '0'

/stamdata/medarbejder_redigering.asp, line 131
Avatar billede kagge Nybegynder
27. september 2003 - 12:30 #3
Hvor denne linje:

kvalifikation(a) = recordSet24("Kvalid")

er linie 131
Avatar billede nmh Nybegynder
27. september 2003 - 13:01 #4
Der mangler ordren:

redim preserve kvalifikation(n)

n skal så være den nye dimension.
Man kan udføre den løbende, men den er belastende og bør udføres i "klumper". F.eks. øg med 10 hver gang, eller hvad der nu er passende i din situation.
Avatar billede nmh Nybegynder
27. september 2003 - 13:14 #5
Her er et lille eksempel, hvor der redimensioneres i "klumper":
dim A(),n,p
redim A(10)
p=0
for n=0 to 100
  if p=10 then
    redim preserve A(Ubound(A)+10)
    p=0
  end if
  p=p+1
  A(n)=n
next
Avatar billede kagge Nybegynder
28. september 2003 - 13:35 #6
Jeg forstår ikke helt det der med redim.

I mit tilfælde kan der maks være 5 "kvalifikation" variabler da man maks kan vælge at have 5 kvalifikationer.
Avatar billede nmh Nybegynder
28. september 2003 - 13:47 #7
Redim:
Hvis du har et array, du vil have mulihed for løbende at ændre størrelse på, så skal du erklære det sådan:
dim A()
Men hvis du nu vil bruge det, så er du nødt til at fortælle, hvor stort, det faktisk skal være.
Det sker med ordren redim A(5) f.eks.
Hvis du senere vil have ændret størrelse, og du vil bevare det dser i forvejen er i arrayet sker det med ordren
redim preserve A(10) f.eks.

Hvis du på forhånd ved, du kun skal bruge et array af størrelsen 5, ja så skaffer du dig det med ordren
dim A(5)
Du kommer så i kontakt med de forskellige dele af A således:
A(0)=123
A(1)=456
x=A(0)
Og det er vist det du har glemt, da du skrev
Avatar billede nmh Nybegynder
28. september 2003 - 13:50 #8
kvalifikation & a = recordSet24("Kvalid")
Det burde have været
kvalifikation(a) = recordSet24("Kvalid")

Så erklær blot de arrays, du skal bruge således:
dim kvalifikation(5)
og nu kan du arbjede med
kvalifikation(0), kvalifikation(1),..., kvalifikation(5)
Så vi hart vist talt forbi hinanden.
Avatar billede nmh Nybegynder
28. september 2003 - 13:51 #9
Avatar billede kagge Nybegynder
28. september 2003 - 14:13 #10
Ok... takker for hjælpen. Så må jeg lige se om jeg kan få det til at spille :)
Avatar billede nmh Nybegynder
28. september 2003 - 14:27 #11
selv tak, det var så lidt.
Avatar billede kagge Nybegynder
28. september 2003 - 14:38 #12
Nu har jeg gjort nedenstående men den fejler med denne besked:

Microsoft VBScript runtime error '800a0009'

Subscript out of range: '1'

/stamdata/medarbejder_redigering.asp, line 130

Når jeg laver en response.write(kvalifikation(0)) så udskrives den rigtige værdi, men det er måske som om at løkken ikke virker efter hensigten?

Dim kvalifikation, a
kvalifikation = Array(5)

a = 0

recordSet24.Open strSQLkval, forbindelse, adOpenStatic, adLockReadOnly, adCmdText

do while not recordSet24.eof

kvalifikation(a) = recordSet24("Kvalid")
a = a + 1

recordSet24.movenext

loop

recordSet24.Close
Set recordSet24 = Nothing
Avatar billede nmh Nybegynder
28. september 2003 - 14:44 #13
Det er fordi, du ikke gør det, som jeg har foreslået.
Du skal erklære dine arrays således:

dim kvalifikation(5)
Avatar billede kagge Nybegynder
28. september 2003 - 15:08 #14
Sorry... Nu virker det som det skal :)

Jeg troede bare ikke at den kunne regne ud at det var et array når man bare skrev dim kvalifikation(5)... Man lærer hele tiden

=> nmh

Bare sig til hvis du vil have nogle flere point. Du har vist brugt en del tid på at banke det ind i hovedet på mig
Avatar billede nmh Nybegynder
28. september 2003 - 15:11 #15
Point: Jeg behøver ikke at få flere.
Det er fint, at det nu virker for dig. :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