Avatar billede Slettet bruger
24. juli 2004 - 01:19 Der er 13 kommentarer og
1 løsning

Oprette variable dynamisk i for-løkke

Hej

Hvordan er det lige man gør, når man nu ikke kan bruge eval i ASP... :o)

for i = 1 to 31
eval("a"+i)=rs("a"+i)
IF eval("a"+i)=="True" THEN
eval("a"+i)=="Ja"
ELSE
eval("a"+i)=="Nej"
END IF
next
Avatar billede erikjacobsen Ekspert
24. juli 2004 - 02:11 #1
Du bruge et array eller et dictionary object. Hvad skal du bruge det til?
Hvis du har en masse "a1", "a2" osv. felter i din tabel, tyder det på et
dårligt databasedesign.
Avatar billede Slettet bruger
24. juli 2004 - 08:58 #2
Dårlig databasedesign vil jeg ikke afvise - det er ikke just min stærkeste side :)

Jeg har en stor formular, der afviger iht. indholdet, afhængig af brugertype.
Derfor har jeg i en HTML-table defineret samtlige felter som et regneark med kollonner a, b, c osv, der stiger i værdi for hver row.

F.eks:

<tr>
        <td><%=a1%></td>
        <td><%=b1%></td>
        <td><%=c1%></td>
        <td><%=d1%></td>
        <td><%=e1%></td>
        <td><%=f1%></td>
</tr>
<tr>
        <td><%=a2%></td>
        <td><%=b2%></td>
        <td><%=c2%></td>
        <td><%=d2%></td>
        <td><%=e2%></td>
        <td><%=f2%></td>
</tr>

Hvis en bestemt bruger logger på, skal der i felterne fremkomme checkbokse vist i et grafisk design

for i = 1 to 31
("a"+i)=rs("a"+i)
IF ("a"+i)=="True" THEN
("a"+i)=="<img src='jatak'>"
ELSE
("a"+i)=="<img src='nejtak'>"
END IF
next

hvorimod en anden bruger skal have mulighed for at ændre denne værdi:

for i = 1 to 31
("a"+i)=rs("a"+i)
IF ("a"+i)=="True" THEN
("a"+i)=="<input name='"&(a+i)&"' type='checkbox' value='checkbox' checked>"
ELSE
("a"+i)=="<input name='"&(a+i)&"' type='checkbox' value='checkbox'>"
END IF
next

- er jeg helt forkert på den ??
Avatar billede netro Nybegynder
24. juli 2004 - 10:15 #3
Jeg ville nok foretrække at fjerne de 31 kolonner fra tabellen og i stedet benytte en seperat tabel til dette, der refererer til din primærenøgle i din eksisterende tabel. Her kan du nøjes med to kolonner. En til fremmednøglen og et talfelt, der kan rumme værdier fra 1 til 31. Indsættes en post med dertilhørende nummer, kan det betragtes som sand (flueben sat) - i modsat fald som falsk (intet flueben).
Avatar billede Slettet bruger
24. juli 2004 - 10:23 #4
Ja - du har sikkert ret
- problemet er, at der i forvejen er mange poster som allerede er fyldt ud, så i denne omgang bliver databasen som den er :(

Men findes der et svar på mit spørgsmål uanset dårlig struktur eller ej.
Kan jeg oprette variable dynamisk i et loop

F.eks denne i en løkke med værdi fra 1 til 31:

a1=rs("a1")
        IF NOT edit="True" THEN

        IF a1 = "TRUE" THEN
        a1="<img src='ok.gif'>"
        ELSE
        a1="&nbsp;"
        END IF

        ELSE
       
        IF a1 = "TRUE" THEN
        a1="<input name='a1' type='checkbox' value='True' checked>"
        ELSE
        a1="<input name='a1' type='checkbox' value='False'>"
        END IF

        END IF
Avatar billede erikjacobsen Ekspert
24. juli 2004 - 10:36 #5
Ville det ikke være nemmest med et array, som jeg har foreslået?
Avatar billede Slettet bruger
24. juli 2004 - 10:41 #6
Det er jer der er eksperterne - så hvis du mener at et array vil være nemmest, køber jeg den - problemet er bare at jeg ikke lige ved hvordan jeg skal lave det..??
Avatar billede thesurfer Nybegynder
26. juli 2004 - 09:44 #7
Eksempel med array:

dim arr
arr = ""

' hent data fra databasen, og put den i variablen "arr"
for i = 1 to 31
arr = arr & rs("a" & i) & ","
next


' fjern det sidste ",":
arr = left(arr, len(arr) - 1)


' lav variablen "arr" om til et array:
arr = split(arr, ",")


' check og lav indholdet om til enten "Ja" (True) eller "Nej" (False):
for i = 0 to ubound(arr)
  if arr(i) = "True" then
    arr(i) = "Ja"
  else
    arr(i) = "nej"
  end if
next
Avatar billede thesurfer Nybegynder
26. juli 2004 - 09:46 #8
Se f.eks. "Lektion 8: Arrays" på http://html.dk/tutorials/asp/lektion8.asp
Avatar billede thesurfer Nybegynder
26. juli 2004 - 09:49 #9
Skulle have været: dim arr, i

Hvis man bruger Option Explicit (øverst i dokumentet), hvilket man altid bør gøre, vil den melde fejl, hvis man ikke definere alle variablerne.

Option Explicit vil melde fejl, hvis man bruger en variabel, som ikke er defineret. Et godt eksempel, er en stavefejl:

sgl (med et lille "G") og sql (med et lille "Q"). De ser næsten ens ud, men Option Explicit vil fange fejlen med det samme.
Avatar billede Slettet bruger
26. juli 2004 - 09:53 #10
super :)
Tak for hjælpen - smider du lige et svar.
Avatar billede thesurfer Nybegynder
26. juli 2004 - 10:35 #11
Ja :-)
..og erikjacobsen samler ikke på points :-)
Avatar billede thesurfer Nybegynder
26. juli 2004 - 10:37 #12
Hvis du vil have fat på a13, hedder den nu arr(12). Dvs, "arr" og "selve tallet minus 1".

Eksempler:
a4 = arr(3)
a31 = arr(30)
osv..

Det er fordi et array starter ved 0, og ikke 1.
Avatar billede Slettet bruger
26. juli 2004 - 10:45 #13
Det ved jeg ;)
Jeg er vant til at arbejde med array's i Flash Actionscript - kendte bare ikke lige syntaxen her i asp - endnu en gang tak for hjælpen :)
Avatar billede thesurfer Nybegynder
26. juli 2004 - 10:57 #14
..man ved aldrig hvad folk ved.. :-)

Det var så lidt, og takker for points :-)
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