Avatar billede grafikeren Nybegynder
01. august 2006 - 01:31 Der er 4 kommentarer og
1 løsning

Dynamisk variabel navn

Hej.

Jeg har brug for at navngive en variabel dynamisk.

Prøv at se følgende forkorte kode eksempel:
e_1=SSAddTopLevelMenu("...")
SSAddMenuItem , e_1, ""

Jeg har brug for at variablen e_1 har et dynamisk navn - så den fx hed e_2 e_3 etc. Den får navnet fra databasen rsSQL("id"). Så hvis man kunne skrive: e_&rsSQL("id") = ... , så ville det jo være perfekt.

Er der en work around? Er kørt lidt træt i det. Jeg kan vel lave en eller anden form for slave variabel som henviser til e_x. Det er for lang tid siden jeg har skrevet ASP.

:o)
Avatar billede miqe Nybegynder
01. august 2006 - 02:26 #1
Avatar billede grafikeren Nybegynder
01. august 2006 - 08:50 #2
Naturligvis!

Fik lige en nedsmeltning i går. Tak for hjælpen! :o
Avatar billede softspot Forsker
01. august 2006 - 08:51 #3
Du har so jeg ser det mindst 3 muligheder:

1. brug execute til at definere og erklære dine variable

2. bruge et array som mige nævner

3. bruge et dictionary-objekt (som er en variant af array-modellen)

Ad 1.:
Med execute-funktionen (som er standard VBScript) kan du generere og udføre script "on the fly" som f.eks.:

Execute "Dim e_" & rsSQL("id")
Execute "e_" & rsSQL("id") & " = SSAddTopLevelMenu(""..."")"

parameteren til Execute er altså blot en streng som indeholder vbscript-kode, så pas på med strengafgrænsere (det er derfor jeg har brugt dobbeltanførselstegn i værditildelingen).


Ad 2.:
Et array kan indeholde variabelværdier som du kan finde frem ved et indeks. Denne metode er lidt mindre intuitiv, men da du i forvejen benytter tal i dit variabelnavn er det måske en OK måde at gøre det på...

dim e()
redim e(0)
e(ubound(e)) = SSAddTopLevelMenu("...")
redim preserve e(ubound(e)+1)
e(ubound(e)) = SSAddTopLevelMenu("...")
...osv


Ad 3.:
Det er som sagt lidt det samme som 2, men med den forskel at du kan bruge de dynamiske variabelnavn som nøgler i dit dictionary, hvilket giver en mere naturlig og intuitiv måde at referere dine variable på.

Set e = Server.CreateObject("Scripting.Dictionary")
e.Add "e_" & rsSQL("id"), SSAddTopLevelMenu("...")

og dette kan naturligvis køres i en løkke som du får lagt alle værdierne fra database-udtrækket over i dit dictionary-objekt. Dette gælder naturligvis også de andre 2 metoder ovenfor... :)
Avatar billede grafikeren Nybegynder
01. august 2006 - 09:03 #4
Wow, tak for det udførlige svar. Jeg fandt dog en løsning med miges hjælp, og havde afgivet point.

Du får lidt karma i stedet. :o)
Avatar billede softspot Forsker
01. august 2006 - 09:11 #5
Tak for karma :)

Det med point er ikke så vigtigt, bare du får nogle muligheder for at løse din udfordring :)
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