Avatar billede klas Juniormester
25. september 2005 - 22:12 Der er 10 kommentarer og
1 løsning

Vælg mere end et billede random fra database

hejsa,

Jeg har en side hvor jeg gerne vil have vist 3 tilfældige billeder fra min billede database, jeg har i forvejen en kode som henter et enkelt. Den ser sådanne ud:

    <%
set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("../xx.mdb")

set rs = Server.CreateObject("ADODB.Recordset")
SQL = "SELECT * FROM gl"
rs.Open SQL, Conn, 1, 3
%><%
randomize
rs.Move(int(rs.RecordCount * rnd))
%>
<br>
<a align='center' href='http://www.klas.dk/gl/billeder/<%=rs("filnavn")%>.jpg'><img src='/gl/billeder/thumbs/<%=rs("filnavn")%>.jpg' border='0'></a><br><br>


Min hjerne bildte mig ind at jeg så bare kunne tage dette:
<%
randomize
rs.Move(int(rs.RecordCount * rnd))
%>

og sætte ind igen, og så tage et ekstra billede ud, det virker også nogle gange, men andre gange kommer der en fejl, og hvis jeg prøver at hente 3 billeder ud så går det slet ikke..

På forhånd tak for hjælpen  :)
Avatar billede softspot Forsker
25. september 2005 - 22:33 #1
Der var fo nylig (indenfor en måned) en diskussion her på sitet om hvordan man træk data ud af en database i tilfældig rækkefølge og såvidt jeg husker blev resultatet noget i stil med dette:

randomize
iRndNum = CInt(-1000 * rnd())
SQL = "SELECT TOP 3 Rnd(" & iRndNum & "*ID), * FROM gl ORDER BY 1"

hvilket betyder at databasen gør det beskidte arbejde (hvilket jeg synes oftest giver mest mening).

Du kan muligvis flytte Rnd-funktionskaldet over i ORDER BY, således:

SQL = "SELECT TOP 3 * FROM gl ORDER BY Rnd(" & iRndNum & "*ID)"
Avatar billede klas Juniormester
25. september 2005 - 22:52 #2
Ok, jeg forstår desværre ikke helt asp, så jeg kan ikke finde ud af at udskrive de 3 billeder nu ?
Avatar billede softspot Forsker
25. september 2005 - 22:57 #3
set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("../xx.mdb")

randomize
iRndNum = CInt(-1000 * rnd())
SQL = "SELECT TOP 3 Rnd(" & iRndNum & "*ID), * FROM gl ORDER BY 1"
set rs = conn.execute(SQL)
do while not rs.eof
  Response.Write rs("filnavn")
  rs.movenext
loop
rs.close
set rs = nothing
conn.close
set conn = nothing
Avatar billede kalp Novice
26. september 2005 - 00:45 #4
softspot har noget pæn kode:)

Hvis du vil have noget kode som du kan copy & paste 3 gange burde følgende virke.
 
<%
  Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.MapPath("xxx.mdb")
  Set rs = Server.CreateObject("ADODB.RecordSet")
strSQL = "SELECT * FROM gl"

rs.Open strSQL, Conn, 3, 1
rndMax = rs.RecordCount
Randomize
rndNumber = Int((RND * rndMax)) 
rs.Move rndNumber
%>
Avatar billede klas Juniormester
26. september 2005 - 01:09 #5
tak for det - Men når jeg sætter det ind kommer der en fejl, er dette ellers ikke korrekt?

<% set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("../access/gl.mdb")
randomize
iRndNum = CInt(-1000 * rnd())
SQL = "SELECT TOP 3 Rnd(" & iRndNum & "*ID), * FROM gl ORDER BY 1"
set rs = conn.execute(SQL)
do while not rs.eof
%>
<a align='center' href='http://www.klas.dk/gl/billeder/<%=rs("filnavn")%>.jpg'><img src='/gl/billeder/thumbs/<%=rs("filnavn")%>.jpg' border='0'></a><br><br>
<%
rs.movenext
loop
%><%
rs.close
set rs = nothing
conn.close
set conn = nothing %>

Fejlen er denne: [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1.
/gl/Default.asp, line 34

Og linie 34 er denne: set rs = conn.execute(SQL)
Avatar billede softspot Forsker
26. september 2005 - 08:52 #6
Har du en kolonne der hedder ID i den tabel der hedder gl, det er nemlig et krav for at man kan bruge den som random seed - som jeg gør her:

"...rnd(" & iRndNum & " * ID)..."

Hvis du ikke har en identity-kolonne som er autonummereret kan denne metode ikke benyttes. Du kan muligvis klare dig med en funktion som hedder NewID, således:

SQL = "SELECT TOP 3 Rnd(" & iRndNum & " * NewID), * FROM gl ORDER BY 1"
Avatar billede klas Juniormester
27. september 2005 - 00:00 #7
Sorry min fejl, min tabel hedder BilledeID, så da jeg ændrede det virkede alt fint.

tusinde tak for hjælpen. Lig venligst et svar :)
Avatar billede softspot Forsker
27. september 2005 - 00:04 #8
Velbekomme :)
Avatar billede softspot Forsker
08. november 2005 - 23:16 #9
Tak for point :)
Avatar billede klas Juniormester
09. november 2005 - 00:53 #10
tak for hjælpen  :)  og undskyld jeg ikke accepterede tidligere, mente bare at jeg havde gjort det.
Avatar billede softspot Forsker
09. november 2005 - 01:09 #11
Det er helt ok... :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester