Avatar billede crapman Nybegynder
25. januar 2005 - 11:07 Der er 7 kommentarer

Dynamisk dim

Hejsa,
Jeg har en fin lille sub der automatisk requester fra en post og opretter en variabel med samme navn som request'ens navn.

Eks: request("test") opretter en variable der hedder strTest som har samme indhold som request("test")

Mit spørgsmål er så om det kan lade sig gøre at få den til at checke om denne variabel er dim'et og hvis ikke så gøre det?
Avatar billede fennec Nybegynder
25. januar 2005 - 11:48 #1
Det kan man ikke.
Jeg er ikke helt med på hvad du vil, men i ASP kan man ikke oprette dynamisk variabler, da variablerne bliver oprette før koden bliver kørt. Det er derfor man kan gøre sådan:

enVar = "test test"
dim enVar

Det tætteste man kommer er med et array eller sessionvariabler (sidst nævnte kan oprettes dynamisk)
Avatar billede crapman Nybegynder
25. januar 2005 - 11:52 #2
Jo man kan godt oprette variabler dynamisk....
her er min sub:

    dim oAllInt, requested
   
    Set oAllInt = New RegExp
    oAllInt.Pattern = "^\d*$"

    ' Ex.:
    '  test.asp?varTest=hej+med+dig
    '  requestfunktion("varTest", true, "var", 19)
   
   
    Sub requestfunktion(sField, bRequired, sType, iErrCode)
   
        If CStr(Request(sField)) = "" And bRequired Then
   
            ' Variablen var obligatorisk, men blev ikke fundet -> Meld fejl
            'Err.Raise iErrCode, "Feltet (" & sField & ") blev ikke fundet"
           
            response.Write err(iErrCode)
   
        ElseIf sType = "int" And Not oAllInt.Test(Request(sField)) Then
                       
            ' Feltet skulle være heltal, men var det ikke -> Meld fejl
            'Err.Raise iErrCode, "Feltet (" & sField & ") er ikke et heltal"
           
            response.Write err(iErrCode)
           
        ElseIf bRequired = true AND request(sField) = "" then
       
            response.Write err(iErrCode)           
           
        Else
       
            requested = request(sField)
           
            if sType = "int" AND requested = "" then requested = 0
            if sType = "var" and requested = "" then requested = " "
           
               
                ' Alt er ok -> Gem feltværdi i variabel
               
                if sType = "int" then
                    Execute("int"&sField & " = int("&requested&")")
                else
                    Execute("str"&sField & " = """&requested&"""")
                end if
               

       
        End If
   
    End Sub
Avatar billede fennec Nybegynder
25. januar 2005 - 13:15 #3
Så har jeg også lært noget idag :o)
Hvorfor vil du have dem dim'et?? Det lader til at de automatisk bliver det.
Avatar billede crapman Nybegynder
25. januar 2005 - 13:17 #4
Nej de nyoprettede variabler bliver ikke dim'et... Så derfor vil jeg på en eller anden måde checke om de allerede er dim'et og hvis ikke så bruge en execute() til at gøre det
Avatar billede jgp Nybegynder
25. januar 2005 - 13:20 #5
Evt. kan du slå on error resume til, den burde fange hvis variablen ikke er dimmet, hvor efter du så kan dimme den, og forsætte som planlagt.
Avatar billede crapman Nybegynder
25. januar 2005 - 13:21 #6
Kanon idé... det prøver jeg sgu lige....
Avatar billede fennec Nybegynder
25. januar 2005 - 13:26 #7
det var jeg lige ved :o)

Her er min kode....
Dette virker fint for mig. Og det må betyder at variablen er oprette.

sub subTest()
  execute("kjbdvksj = ""En Test!!""")
  response.write kjbdvksj
end sub
call subtest()
response.write kjbdvksj

ellers kan du vel slå fejlbehandling til:
on error resume next
  fdgfd  = fdgfd
  if err.number <> 0 then execute("dim fdgfd")
on error goto 0
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