webForumDet fria alternativet

Funktion - Returera flera värden?

ASP

5 svar · 325 visningar · startad av Troxy

Medlem sedan mars 20041 505 inlägg
Frågan#1

Hej, när jag kodar ASP så utför jag ofta samma saker och rutiner flera gånger. Det mesta har jag lyckats göra funktioner av, men en sak har jag inte lyckats komma underfund med hur man kan baka ihop på ett enkelt sätt, och det är:

1. Öppna databas
2. Plocka ut värden ur alla kollumner från posten med id X (Där X är ett tal jag vill kunna skicka med)
3. Skapa RecSet
4. Spara ner alla värden i variabler
5. Stänga RecSet
6. Stänga databas

Jag vet inte om man kan returera flera värden i en metod, det är troligen inte heller möjligt att läsa av variabler, som skapas i en metod, någon annan stans i koden.

Hur ska jag göra detta så lätt som möjligt?

Mvh Emil

Medlem sedan juni 200032 967 inlägg
#2

Jag vet inte om man kan returera flera värden i en metod

Jo, det är möjligt. Använd ByRef-parametrar i din funktion.

Function foo(var1, ByRef var2)
   var2 = "weee"
   foo = "wooo"
End function

....

strTmp = foo("foo", minVariabel)
Response.write strTmp & " - " &  minVariabel

det är troligen inte heller möjligt att läsa av variabler, som skapas i en metod, någon annan stans i koden.

Se till att "dimma" de utanför funktionen (globalt) och inte i funktionen (lokalt), så ska det inte vara några problem.

mvh

Medlem sedan mars 20041 505 inlägg
#3

Tack så mycket!

Jag har också upptäckt en ny användbar sak, nämligen Subrutiner. Men nu vet jag hur man gör ned Funktioner också.

Medlem sedan feb. 200112 078 inlägg
#4

Om du har väldigt många parametrar eller ett variabelt antal som du vill returnera, så kan du använda databärare som t.ex. Dictionary's för att returnera värden. På det sättet får du även en fast signatur på din metod ifall du skulle vilja ändra antalet ut-parametrar senare, utan att behöva ändra kod någon annanstans i applikationen, om din metod används på många ställen.

Public sub baluba(ByVal inval As String, _
    ByRef dic As scripting.Dictionary)
        
    dic("EnVariabel") = "1" & inval
    dic("EnAnnanVariabel") = "2" & inval
    
End sub

set dic = server.createobject("scripting.dictionary")
dic.comparemode = 1 'case-insensitive index names

baluba "värde", dic

response.write dic("EnVariabel") & "<br>"
response.write dic("EnAnnanVariabel") & "<br>"

set dic = nothing
Medlem sedan juni 200032 967 inlägg
#5

Notera dock att koden Override visar är felaktig. Han har blandat VB med VBScript, och det är inte så lyckat. ;)

Så här borde subrutinen se ut (notera interfacet):

Public sub baluba(ByVal inval, ByRef dic)
        
    dic("EnVariabel") = "1" & inval
    dic("EnAnnanVariabel") = "2" & inval
    
End sub

ByVal kan man utelämna om man vill, då det är default (till skillnad från VB, där ByRef är default).

mvh

Medlem sedan feb. 200112 078 inlägg
#6

Ajsing vajsing, det var ju inte meningen. Lite insnöad efter flera veckor i VB6 nu. ;)

Tack @nders! :D

270 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
134 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
134 ms — ändringar (db)