webForumDet fria alternativet

problem med getrows,arrayer och sånt annat kul...

6 svar · 288 visningar · startad av mikul

mikulMedlem sedan aug. 20013 824 inlägg
#1

Tja...
jag har fått lite problem med mitt slumpscript som ska retunera 4 olika poster...
den retunerar 4 likadana poster...
OBS!! koden är lite stökig nu...jag har nämligen testat lite allt möjligt....

<%
'--> Här fyller du i antalet slumpningar
'Dim intAntalSlumptal
const intAntalSlumptal = 4
Dim rndArray()

'--> Öppnar databasen
Set objCon = Server.CreateObject("ADODB.Connection")
objCon.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("forum.mdb")&";"

'--> Skapa Arrayen och ett slumpat tal.
Set objrs = objCon.Execute("SELECT * FROM asp")
RecArray = objrs.GetRows()
objrs.Close : Set objrs = Nothing
objCon.Close : Set objCon = Nothing

'--> Skapa alla slumptalen och lägger dom i en array
Randomize
Redim rndArray(4)
For i = 0 To intAntalSlumptal
  rndArray(i) = int(rnd*UBound(RecArray,2))
Next

intRecCount = LBound(RecArray,2)
intRecCounted = 0

'--> Bläddra fram till posten
Do while not intRecCount > UBound(RecArray,2) OR intRndcounted = intAntalSlump

'--> Kollar om posten stämmer med slumptalet
  If intRecCount = rndArray(intRecCounted) Then
  
  intRecCount = LBound(RecArray,2)
  intRndcounted = intRndcounted + 1
  rndArray(0) = rndArray(cint(intRecCounted+1))  

  '-->skriver ut posten om det nu är rätt post
  For intFieldCount = LBound(RecArray,1) To UBound(RecArray,1)
  Response.write "<table border=1> <tr>"&_
  "<td>"& RecArray(intFieldCount, intRecCount) &"</td>"&_
  "</tr> </table>"
  Next
  intRndCount = Cint(intRndCount+1)
  If intRndCounted = intAntalSlumptal Then Exit Do
  else
  intRecCount = intRecCount + 1
  End if
Loop
%>

/ Mikul

trexter.comMedlem sedan apr. 20021 203 inlägg
#2

Scriptmotorn slumpar enligt en viss algoritm och mönster och påverkar ingenting den uppkommer alltid samma tal! Använd Radomise() + rnd så ska det nog fungera...

(finns en artikel om det på http://4guysfromrolla.com)

:)

mikulMedlem sedan aug. 20013 824 inlägg
#3

jag kan tyvärr inte hitta artikeln...
kan du inte dra ett exempel på hur det ska se ut???

/ Mikul

PaceMedlem sedan juni 20019 024 inlägg
#4

Använd

Randomize Timer()
mikulMedlem sedan aug. 20013 824 inlägg
#5

funkar inte...=(

PaceMedlem sedan juni 20019 024 inlägg
#6

Okej, då är det koden för att "bläddra fram till posten" som är fel. En enklare variant:

intSlump1 = RecArray(0, rndArray(0))
intSlump2 = RecArray(0, rndArray(1))
intSlump3 = RecArray(0, rndArray(2))
intSlump4 = RecArray(0, rndArray(3))
mikulMedlem sedan aug. 20013 824 inlägg
#7

så här ser det ut nu:

<%
'--> Här fyller du i antalet slumpningar
'Dim intAntalSlumptal
const intAntalSlumptal = 4
Dim rndArray()

'--> Öppnar databasen
Set objCon = Server.CreateObject("ADODB.Connection")
objCon.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("forum.mdb")&";"

'--> Skapa Arrayen och ett slumpat tal.
Set objrs = objCon.Execute("SELECT * FROM asp")
RecArray = objrs.GetRows()
objrs.Close : Set objrs = Nothing
objCon.Close : Set objCon = Nothing

'--> Skapa alla slumptalen och lägger dom i en array

Redim rndArray(4)
Randomize Timer()

Dim tmpRnd
Dim tmpArr(4)
tmpRnd = 0
While not Cint(tmpRnd) = intantalslumptal
rndArray(Cint(tmpRnd)) = int(rnd*UBound(RecArray,2))
For i = 0 To intAntalSlumptal
If rndArray(i) = rndArray(tmpRnd) Then
tmpRnd = tmpRnd - 1
End if
Next
tmpRnd = tmpRnd + 1
Wend

'-->skriver ut posten om det nu är rätt post
for tmpRec = 0 To 4
For intFieldCount = LBound(RecArray,1) To UBound(RecArray,1)
Response.write "<table border=1> <tr>"&_
"<td>"& RecArray(intFieldCount, rndArray(tmpRec)) &"</td>"&_
"</tr> </table>"
Next
next
%>

men det värkar vara nåt fel här:
If rndArray(i) = rndArray(tmpRnd) Then
tmpRnd = tmpRnd - 1
End if

Microsoft VBScript runtime error '800a0009'

Subscript out of range: '-1'

/Mikul/asp/test.asp, line 39

128 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)