webForumDet fria alternativet

Varför funkar inte slumpscriptet?

7 svar · 564 visningar · startad av magnusfeldth

magnusfeldthMedlem sedan jan. 20034 480 inlägg
#1

Använder följande kod i asp-miljö med accessdatabas för att slumpa fram en post, men det funkar inte utan visar alltid samma post hela tiden.

<%		
                Set RecSet3 = Server.CreateObject("ADODB.Recordset")
                Visa3 = "SELECT * FROM bildb WHERE visa = 'ja' order by rnd(bilid) "
                RecSet3.Open Visa3, Connect, adOpenStatic, adLockOptimistic
                %>

why, oh god why??

prebenMedlem sedan mars 2009452 inlägg
#2

1. Skriv inte SELECT stjärna.
2. Lägg in alla bilder i en application-variabel, som en array.
3. application("allaBilder")
4. Slupma från dessa, UBound(application("allaBilder"), 2)

5. Sen skriver du sökvägen.

***
Du behöver inte läsa alla bilderna vid varje sidläsning.

IF IsArray( application("allaBilder") ) THEN

...
ELSE
... läs din fråga och lägg in i application("allaBilder") = mySQL.GetRows()
END IF

***
OK, jag vet inte om detta funkar för dig. Jag är HELT emot din kåd. Både adOptimistic-skiten och SELECT stjärna. Skippa båda och jag hjälper dig!

Lycka till!

voigtann1Medlem sedan juni 20019 519 inlägg
#3

guffa har skrivit om detta:

http://www.guffa.com/Programming_article.asp?id=37

magnusfeldthMedlem sedan jan. 20034 480 inlägg
#4

guffas kod för att få fram fem poster ser ut så här

Randomize
strSQL = "select top 5 Id, Info from Tabellen order by Rnd(-Id-" & Replace(Rnd(),",",".") & ")"

... om jag bara sätter in order-momentet får jag följande felmess:

Microsoft OLE DB Provider for ODBC Drivers error '80040e10'

[Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1.
Peter SMedlem sedan dec. 20025 483 inlägg
#5

Har du ersatt Id med BildId (eller vad ditt id-fält nu heter)?

Vad ger response.write strSql?

magnusfeldthMedlem sedan jan. 20034 480 inlägg
#6

Peter S, nu har jag gjort det (fast det är faktiskt bil-id, inte bild-id ;) )

Problemet är dock samma som innan denna koden, jag får alltid samma värde

magnusfeldthMedlem sedan jan. 20034 480 inlägg
#7

hittade den här tråden http://www.webforum.nu/showthread.php?t=129199 - men förstår inte hur jag skall översätta koden för att passa min...

<% Dim Cn, Rs, Antal, Rand_nr
Set Cn = Server.CreateObject("ADODB.Connection")
Cn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("db_random.mdb")

Set Rs = Cn.Execute("Select Id, Namn, Land From tbl_random")

If Rs.EOF Then
Response.Write "Inga poster att slumpa än.."
Rs.Close : Set Rs = Nothing
Cn.Close : Set Cn = Nothing

Else
With Rs
.Close
.Cursortype=3
.Open
End With
Antal = Rs.RecordCount

Randomize
Rand_nr = Int(Rnd * Antal)

Rs.Move Rand_nr

Response.Write Rs("Id") & ". " & Rs("Namn") & ", " & Rs("Land")
Rs.Close : Set Rs = Nothing
Cn.Close : Set Cn = Nothing
End If %>
magnusfeldthMedlem sedan jan. 20034 480 inlägg
#8

Påtade ihop denna koden, och det funkade bannemig! Tack för hjälpen m_soderlund som skrev ursprungsskriptet!

<%	

	            dim Antal, Rand_nr
	            
                Set RecSet3 = Server.CreateObject("ADODB.Recordset")
                Visa3 = "SELECT * FROM bildb WHERE visa = 'ja'"
                
                RecSet3.Open Visa3, Connect, adOpenStatic, adLockOptimistic

                Antal = RecSet3.RecordCount
                
                Randomize
                Rand_nr = Int(Rnd * Antal)
                
                RecSet3.Move Rand_nr
                               %>
131 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)