RND() finns inte i MS Access. Däremot kan du lösa det på andra sätt, ta en titt i nedanstående tråd:
http://www.webforum.nu/showthread.php?s=&forumid=55&threadid=75738
10 svar · 637 visningar · startad av Danielkun
Jag har en Access Databas som jag använder denna sträng på,
strSQL = "SELECT ID, Japanese, Hiragana, English, Typ, Datum, Apperance, Hits FROM words WHERE Addedby = 'Danielkun' ORDER BY RND(ID)"
och resultatet är slumpat om man jämnför med ordningen inläggen är inlaggda i databasen, fast den verkar bara slumpa en gång för varje gång man kommer tillbaka är dom i "samma" slumpande ordning.. vet nån hur man får ASP att slumpa om den 'igen'?
RND() finns inte i MS Access. Däremot kan du lösa det på andra sätt, ta en titt i nedanstående tråd:
http://www.webforum.nu/showthread.php?s=&forumid=55&threadid=75738
Tack! Jag testade koden på detta sätt. Men nu funkar koden och ibland inte. Får man nummer som inte finns reggade i ID kolumnen i databasen då kanske? Sen har jag ingen riktig shuffle här heller.. får alltid samma inlägg sist.
Vore jätteglad för hjälp
Set objConn = server.CreateObject("ADODB.Connection")
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Databasen
objConn.Open strConn
strSQL = "SELECT ID, Japanese, Hiragana, English, Typ, Datum, Apperance, Hits FROM words WHERE Addedby = 'Danielkun'"
Set objRS = objConn.Execute(strSQL)
if (objRS.BOF OR objRS.EOF) then
else
While NOT objRS.EOF
Randomize
objRS.Move CLng((objRS.RecordCount * Rnd) + 1
HEJ!
Nej, denna kod har ju ingen hantering för undantag av id som inte används, tänkte jag skriva, men det har ingen betydelse, den hoppar ju till den post som slumpas fram?
Alltså borde det fungera.
I vilket fall ville jag delge min kod jag gjorde för några år sedan för att slumpa ut i detta fall sju recept, utan dubletter.
Detta löstes genom att lägga posterna i en array som krymptes efter varje slumpning.
Ta bort ' från raderna och se hur vackert det fungerar :e
sql="SELECT id, namn FROM recept"
RS.Open sql, dbconn, 1, 2
If NOT RS.EOF Then
GRrecept = RS.GetRows
uboundarray=UBound(GRrecept,2)
antalrec=7: antalslump=0: i=0
If uboundarray+1 > antalrec Then
Do Until antalslump = 7
'for k=0 to uboundarray-i
'response.write GRrecept(0,k) & " " & GRrecept(1,k) & "<br>"
'next
Randomize
slumptal=Int(Rnd*(uboundarray+1-i)) '+1 pga array 0,1...
'response.write "slump" & slumptal & "<br>"
slumparrayrec(0,antalslump) = GRrecept(0,slumptal)
'response.write "slumparrayrec0," & i & " " & slumparrayrec(0,antalslump) & "<br>"
slumparrayrec(1,antalslump) = GRrecept(1,slumptal)
'response.write "slumparrayrec1," & i & " " & slumparrayrec(1,antalslump) & "<br>"
'flytta posterna över slumptalet nedåt
For j = slumptal To uboundarray-1-i
GRrecept(0,j) = GRrecept(0,j+1) '+1 ska ju flytta nästa tal
'response.write "GRrecept1," & j & " " & GRrecept(0,j+1) & "<br>"
GRrecept(1,j) = GRrecept(1,j+1)
'response.write "GRrecept1," & j & " " & GRrecept(1,j+1) & "<br>"
Next
'response.write "ubound före krymp " & UBound(GRrecept,2) & "<br>"
ReDim Preserve GRrecept(UBound(GRrecept, 1), UBound(GRrecept, 2) - 1)
'response.write "ubound efter krymp " & UBound(GRrecept,2) & "<br>"
i=i+1
antalslump = antalslump+1
Loop
Else
For j = 0 to uboundarray
slumparrayrec(0,j) = GRrecept(0,j)
slumparrayrec(1,j) = GRrecept(1,j)
Next
End If
For k=0 To UBound(slumparrayrec,2)
response.write "<a href=""rec.asp?id=" & slumparrayrec(0,k) & "">" & slumparrayrec(1,k) & "</a>"
Next
Else
response.write "Det finns inga recept."
End If
RED: Se http://www.webforum.nu/showthread.php?s=&postid=837740#post837740
Tack for svaret!@men jag har en databas med 2-3000 poster sa det tar nog en del tid att gora detta ? :D fast jag vill bara plocka ut 1-200 i taget..
HEJ!
Njae, tid och tid... :)
Jag har rätt exakt 3000 recept, visserligen på olika språk och andra kategoriseringar också, det blir nog aldrig mer än 50 recept att slumpa bland, tror jag.
Men, det viktiga är att i vilket fall måste du hämta dina poster med ett RS, sedan skyfflar jag över det till en array, och då påverkar du inte servern längre.
OM du inte har en webbplats med många besökare, kan du bortse från prestandaproblem.
Testa med ditt värsta scenario.
Ska du verkligen slumpa bland alla dina poster?
Jättetack,
Jag sitter o testar för fullt här nu, men det var lite klurigt det här.. har du kvar din sida med recept på nätet så jag kan se vad du får för resultat av det här? du har ganska mycket "grafik loopar" med i koden, eller?
HEJ!
Njae, den finns kvar, men nu visar vi alla istället.
Grafikloopar, vad menar du med det, det finns inte tillstymmelse till gif i koden!
Du ska utan problem kunna köra min kod och få sju slumpningar av id och namn.
Kodsnutten
for k=0 to uboundarray-i
response.write GRrecept(0,k) & " " & GRrecept(1,k) & "<br>"
next
ska INTE köras, jag tog bort fnuttarna tidigare, eftersom allt stod på en rad i min fil. (Ändrat ovan.)
Sorry, men jag får "Inkompatibla typer" på 'slumparrayrec' :r
HEJ!
Okej, det förstår jag inte varför, kolla vad du försöker göra genom att skriva ut det.
Krånglar det med detsamma, eller efter några loopar tex?
Har du dim:at variblerna, eller åtminstone arrayen?
Tänkte inte på att i skicka med det tidigare.
Dim uboundarray, antalslump, i, j, k, slumptal
Dim GRrecept, slumparrayrec(1,6), antalrec
Oj, tack!
La precis in ett inlägg om det :)
Jag måste gå o jobba lite nu, ska testa så fort jag kommer hem