Jag har en tabell i en access-databas med okänt antal poster. Hur ska jag göra för att den ska välja ut en slumpvald post ur tabellen?
------------------
// David
5 svar · 176 visningar · startad av DavidB
Jag har en tabell i en access-databas med okänt antal poster. Hur ska jag göra för att den ska välja ut en slumpvald post ur tabellen?
------------------
// David
Här är ett sätt, lite krångligt men, men:
Set Databas = Server.CreateObject("ADODB.Connection")
MdbFilePath = Server.MapPath("/scripts/databas.mdb")
Databas.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & MdbFilePath & ";"
'***** Hämta en länk slumpartat ifrån databasen *****
SQL = "select Count(*) AS klo from tabell"
Set RS_klo = databas.execute(SQL)
Randomize
Set rstemp = Server.Createobject("ADODB.Recordset")
SQL = "Select * from lankar"
rstemp.cursorlocation = aduseclient
rstemp.cachesize = 5
rstemp.open SQL, "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & MdbFilePath & ";"
rstemp.move Int(Rnd*RS_klo("klo"))
Sedan hämtar du bara med: RStemp("fält")
Och så måste du har adovbs.inc inkluderad på sidan...
------------------
)|(
(o o)
-oo0-(_)-0oo-----
webeye.nu *hem*
vide@4sale.se
[Redigerat av Vide den 12 jun 2000]
Hej!
Ett annat sätt är att göra så här:
<%
Set Connection = Server.CreateObject("ADODB.Connection")
Connection.Open "driver={Microsoft Access Driver (*.mdb)};dbq=c:\brimba\banners.mdb"
SQL = "Select * FROM tabRandom"
RStemp = UBOUND(Connection.Execute(SQLStmt).GetRows(),2)+1
Randomize
post = Int(RND*RStemp)
Set RS = Connection.Execute(SQLStmt)
For s = 1 to post
RS.MoveNext
Next
%>
<A HREF="<%= RS("httpURL")%>" target="_new">
<IMG SRC="<%= RS("bildURL")%>" border="0" width="480" height="60">
</A>
<%
RS.Close
Connection.Close
%>
Här plockar vi alltså ut en slumpvald post och kan arbeta med den.
Lycka till
------------------
Mvh
Patrik
aka Brimba
www.datormaklarna.se
patrik@datormaklarna.se
[Redigerat av Brimba den 13 jun 2000]
Brimpa, jag tycker att den där loopen ser lite läskig ut... :) den fungerar precis som mitt record set...
Men vi kan ju säga såhär: är det några få poster, så använder du Brimba's script... och är det många poster så är det bättre att använda mitt...
------------------
)|(
(o o)
-oo0-(_)-0oo-----
webeye.nu *hem*
vide@4sale.se
Jag använde följand kod:
<%
Set Connection = Server.CreateObject("ADODB.Connection")
Connection.Open "driver={Microsoft Access Driver (*.mdb)};dbq=c:\brimba\banners.mdb"
SQL = "Select * FROM tabRandom"
RStemp = UBOUND(Connection.Execute(SQLStmt).GetRows(),2)+1
Randomize
post = Int(RND*RStemp)
Set RS = Connection.Execute(SQLStmt)
For s = 1 to post
RS.MoveNext
Next
%>
men sen kom jag på att jag ville lägga till en funktion och det var att den bara skulle välja utav de som hade rätt datum ungefär något sånt här:
'datum innehåller dagens datum
SQLStmt = "Select * FROM Banners Where Startdate <= '" & datum & "' AND Enddate => '" & datum & "'"
RStemp = UBOUND(Connection.Execute(SQLStmt).GetRows(),2)+1
Randomize
post = Int(RND*RStemp)
Set RS3 = Connection.Execute(SQLStmt)
For s = 1 to post
RS3.MoveNext
Next
det blir följande fel:
Microsoft OLE DB Provider for ODBC Drivers fel '80040e14'
[Microsoft][Drivrutin för ODBC Microsoft Access] Syntaxfel (operator saknas) i frågeuttrycket 'Startdate <= '2000-06-13' AND Enddate => '2000-06-13''.
/fil.asp, rad 61
jag vill allstå att den ska läsa ifrån endast något av de fält som dagens datum är emellan Startdate och Enddate.
Hoppas att någon förstår.
------------------
// David
[Redigerat av DavidB den 13 jun 2000]
[Redigerat av DavidB den 13 jun 2000]
Löste problemet
Jag löste det på följande sätt (om någon annan skulle få samma problem):
Koden såg ut följande:
Where Startdate <= '" & datum & "' AND Enddate => '" & datum & "'"
Men den ska se ut såhär
Where Startdate <= '" & datum & "' AND Enddate >= '" & datum & "'"
skillnaden är => och >= vid Enddate
Enddate =>
ska vara
Enddate >=
------------------
// David