Avatar billede dp2001 Juniormester
20. maj 2003 - 12:38 Der er 13 kommentarer og
1 løsning

'Dynamiske variabler'

Jeg er ikke nogen haj og har derfor brug for hjælp.

Jeg vil, i en funktion, gerne bruge variabeldata som del af variabelnavn. Dette, da jeg gerne vil spare noget kode. Først slår jeg op i 'users' for at finde brugere - og herefter vil jeg gerne løbe funktionen igennem for alle brugere.

Har en forestilling om, at det skal være noget a la nedenstående, men andre forslag/workarounds er også velkomne.

-----------
strSQL0 = "Select medlem from users where medlem <> 'SYS'order by medlem"
Set rs0 = Conn.Execute(strSQL0)

Do Until rs0.EOF

strSQL = "Select * from kuponer where medlem = '" & medlem & "' and status = 'S' order by kupon_id asc"
Set rs = Conn.Execute(strSQL)

(medlem & "_" & perm_cnt) = 0
(medlem & "_" & perm_gev) = 0
(medlem & "_" & temp_cnt) = 0
(medlem & "_" & temp_gev) = 0

Do Until rs.EOF

if rs("gevinst") > 0 then

  if (medlem & "_" & temp_cnt) = 0 then

  (medlem & "_" & temp_st) = rs("uge") & ", " & rs("aar")

  end if 

  if (medlem & "_" & temp_cnt) >= 0 then

  (medlem & "_" & temp_nd) = rs("uge") & ", " & rs("aar")

  end if

(medlem & "_" & temp_cnt) = (medlem & "_" & temp_cnt) + 1
(medlem & "_" & temp_gev) = (medlem & "_" & temp_gev) + rs("gevinst")

  if (medlem & "_" & temp_cnt) >= (medlem & "_" & perm_cnt) and (medlem & "_" & temp_gev) > (medlem & "_" & perm_gev) then

  (medlem & "_" & perm_cnt) = (medlem & "_" & temp_cnt)
  (medlem & "_" & perm_gev) = (medlem & "_" & temp_gev)
  (medlem & "_" & perm_st)  = (medlem & "_" & temp_st)
  (medlem & "_" & perm_nd)  = (medlem & "_" & temp_nd)

  else

  (medlem & "_" & perm_cnt) = (medlem & "_" & perm_cnt)
  (medlem & "_" & perm_gev) = (medlem & "_" & perm_gev)
  (medlem & "_" & perm_st)  = (medlem & "_" & perm_st)
  (medlem & "_" & perm_nd)  = (medlem & "_" & perm_nd)

  end if

else

(medlem & "_" & temp_cnt) = 0
(medlem & "_" & temp_gev) = 0

end if

rs.MoveNext
Loop


Loop
----------
Avatar billede erikjacobsen Ekspert
20. maj 2003 - 12:41 #1
brug Scripting.Dictionary
Avatar billede dp2001 Juniormester
20. maj 2003 - 12:42 #2
Jeg er ikke lige med! Hvordan og hvorledes? Er det dokumentation eller?
Avatar billede erikjacobsen Ekspert
20. maj 2003 - 12:45 #3
Det er et af de indbyggede objekter i ASP/VB. Slå det selv op.

Men - jeg forstår ikke at du vil det du beskriver. Det bør kunne laves uden.
Avatar billede dp2001 Juniormester
20. maj 2003 - 12:46 #4
Garanteret - jeg ved bare ikke lige hvordan.
Avatar billede erikjacobsen Ekspert
20. maj 2003 - 12:48 #5
Du må forklare hvorfor du ikke bare kan bruge fx en almindelig variabel,
der hedder temp_cnt
Avatar billede dp2001 Juniormester
20. maj 2003 - 12:52 #6
Jeg vil gerne gennemløbe koden for x antal brugere. Hvis jeg senere laver en
Response.Write temp_cnt
-så bliver det jo for den sidste bruger jeg har kørt gennem kværnen.
Håber, at det er mere forståeligt.
Avatar billede Spotgun Seniormester
20. maj 2003 - 12:55 #7
Så vidt jeg husker, lavede jeg nogle eksperimenter for noget tid siden, hvor det vist nok lykkedes mig at lave dynamiske variabler vha. Execute-funktionen.

Jeg kigger lige nærmere på det...
Avatar billede erikjacobsen Ekspert
20. maj 2003 - 12:58 #8
Der er li'som ingen grund til at lave dynamiske variabler når man har Scripting.Dictionary

Ja, temp_cnt gælder for den sidste bruger. Du kan skrive den ud med det samme,
eller lave en sum i en ny variabel, eller gemme værdierne i et array eller
lignende. Hvad er det præcist du vil?
Avatar billede dp2001 Juniormester
20. maj 2003 - 13:01 #9
Jeg vil bare gerne udskrive værdierne. Men eftersom jeg har mange forskellige queries mv. i samme ASP, vil jeg ikke udskrive værdien med det samme - men i stedet først 1) indhente og beregne alle data og 2) præsentere.
Avatar billede erikjacobsen Ekspert
20. maj 2003 - 13:03 #10
Det er en god opdeling. Det er bare træls at ASP/VB-sproget er til så
lidt hjælp. Scripting.Dictionary er nok bedste bud. Du skal så kun gemme
de ting du vil udskrive, og blot bruge "almindelige" variabler mens du regner.
Avatar billede dp2001 Juniormester
20. maj 2003 - 13:05 #11
OK. Har du evt. et link eller noget, hvor jeg kan finde mere info, eksempler mv.?
Avatar billede erikjacobsen Ekspert
20. maj 2003 - 13:06 #12
En anden måde er at lave et array med præcis plads til det antal medlemmer,
der kommer fra første forespørgsel (..noget med redim...), og så putte
de fire værdier du har ind i et simpel streng, du kan tage dem ud af igen:
"1|2|3|4" - det er vel bare tal. Det er lidt "hacket" ...
Avatar billede Spotgun Seniormester
20. maj 2003 - 13:08 #13
<%
temp = 7
Execute(Request.Querystring("navn") & "=" & Request.QueryString("val"))
Response.Write Eval(Request.QueryString("navn") & "+ temp")
%>

Det her virker, men som man kan se, er det ret bøvlet at bruge...
Men en dynamisk variabel, det er der i hvert fald :-)
Avatar billede jhauge Nybegynder
23. maj 2003 - 16:03 #14
Det er ikke nødvendigt at "redimme" et array for at putte det i et recordset, brug:

array = rs.GetRows()

Så har du et array med indholdet fra recordsettet, og du kan trygt lukke dit recordset.
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