Uhm nu var det ett tag sedan jag kodade asp, men variabeln Array är väl ingen array just vid det tillfället? (man kan väl inte köra en ubound på en icke-array?)
Response object error 'ASP 0251 : 80004005'
Response Buffer Limit Exceeded
/random.asp, line 0
Execution of the ASP page caused the Response Buffer to exceed its configured limit.
..det står att du loopar så jävla mycket så att output-buffern på servern spydde. Dvs du måste bryta dig ur loopen... kan ju iofs bero på att din array är gigantiskt stor...
dim allpictures(4)
'läs in alla filnamn i en array allpictures,
'utlämnas som övning till läsaren
allpictures(0) = "1.jpg"
allpictures(1) = "33.jpg"
allpictures(2) = "56.jpg"
allpictures(3) = "77.jpg"
dim choosen(4)
dim i,pictures,choice
randomize
for i = 0 to 4
choice = int((ubound(allpictures)+1-i)*rnd())
choosen(i) = allpictures(choice)
allpictures(choice) = allpictures(ubound(allpictures)-i)
next
FOR i = 0 TO UBound(choosen,1)
response.write choosen(i) & " "
NEXT
myRow = application("activeUsers")
IF IsArray(myRow) THEN response.write "xxxxxx " ELSE response.write "nooo!!"
response.write UBound(myRow)
i = UBound(myRow)
' dim choosen(4)
[b]dim choosen(UBound(myRow))[/b]
' dim i,pictures,choice
randomize
for i = 0 to UBound(myRow)
choice = int((ubound(myRow)+1-i)*rnd())
choosen(i) = myRow(choice)
myRow(choice) = myRow(ubound(myRow)-i)
next
FOR i = 0 TO UBound(choosen,1)
response.write choosen(i) & " "
NEXT
***
Så här ser koden ut nu och felmeddlandet lyder:
Microsoft VBScript compilation error '800a0402'
Expected integer constant
/v1/random.asp, line 40
dim choosen(UBound(myRow))
------------^
Jag har testat lite olika varianter och nu undrar jag varför jag inte kan sätta längden på en array till samma längd som en annan array...??
SQL = "SELECT intID, strName FROM [users];"
set mySQL = Conn.Execute(SQL)
IF NOT mySQL.EOF THEN
myRow = mySQL.GetRows()
redim myUsers(UBound(myRow,2))
FOR j = 0 TO UBound(myRow,2)
myUsers(j) = myRow(1,j)
NEXT
END IF
redim choosen(UBound(myUsers))
randomize
for i = 0 to UBound(myUsers)
choice = int((ubound(myUsers)+1-i)*rnd())
choosen(i) = myUsers(choice)
myUsers(choice) = myUsers(ubound(myUsers)-i)
next
FOR i = 0 TO UBound(choosen)
response.write choosen(i) & " "
NEXT
Denna koden hämtar användarna och tilldelar ett värde i en array:
myUsers(0) = "Anders"
myUsers(1) = "Krabban"
myUsers(2) = "Erik"
myUsers(3) = "Pelle"
IF NOT mySQL.EOF THEN
myRow = mySQL.GetRows()
redim myWords(UBound(myRow,2))
FOR j = 0 TO UBound(myRow,2)
myWords(j) = myRow(1,j)
NEXT
END IF
redim choosen(UBound(myWords),UBound(myWords))
FOR j = 0 TO UBound(myWords)
randomize
FOR i = 0 TO UBound(myWords)
choice = INT((ubound(myWords)+1-i)*RND())
choosen(i,j) = myWords(choice)
myWords(choice) = myWords(UBound(myWords)-i)
NEXT
FOR i = 0 TO UBound(choosen,2)
response.write choosen(i,j) & " "
IF i = UBound(choosen,2) THEN response.write "<BR>"
NEXT
NEXT
När du loopat igenom arrayen en gång så har du ju tagit bort värdena i den. För varje värde du slumpar fram så skrivs det ju över av det sista värdet i arrayen. Alltså kan du inte använda arrayen mer än en gång.
Du kan göra en array med index som du tar bort värdena i istället för att flytta om värdena i arrayen med ord. Den är enklare att fylla med nya värden än att kopiera arrayen med ord.
Såg ett fel i slumpfunktionen. Den kommer aldrig att slumpa fram det sista ordet i arrayen först.