ConnyFoxMedlem sedan aug. 20011 087 inlägg jag kom på att jag missat denna koden.. vart ska jag placera den?
Function Randomizer () As Integer
Static AlreadyDone As Integer
If AlreadyDone = False Then Randomize : AlreadyDone = True
Randomizer = 0
End Function
------------------
*brölar ljudligt*
ConnyFoxMedlem sedan aug. 20011 087 inlägg Jag la upp koden såhär vet inte om det e rätt, nån som vet?
<%
Function Randomizer () As Integer
Static AlreadyDone As Integer
If AlreadyDone = False Then Randomize : AlreadyDone = True
Randomizer = 0
End Function
%>
<%
database = Server.MapPath("links.mdb")
Set Connection = Server.CreateObject("ADODB.Connection")
Connection.Open "driver={Microsoft Access Driver (*.mdb)};dbq="& database
Set RecSet = Server.CreateObject("ADODB.Recordset")
if Request.querystring("kategori") = "alla" then
SQL = "SELECT * FROM links ORDER BY linkname"
elseif Request.querystring("kategori") = "Senaste" then
SQL = "SELECT TOP 10 * FROM links ORDER BY datum DESC"
elseif Request.querystring("kategori") = "Top" then
SQL = "SELECT TOP 10 * FROM links ORDER BY klicks DESC"
elseif Request.querystring("kategori") = "random" then
SQL = "SELECT top 10 * from links where randomizer() = 0 order by rnd(isnull(links.question) * 0 + 1)"
else
SQL = "SELECT * FROM links WHERE kategori LIKE '"& Request.querystring("kategori") &"' ORDER BY datum DESC"
end if
RecSet.Open SQL, Connection, 3, 3
%>
o fick detta felet.
Kompileringsfel i Microsoft VBScript fel '800a0400'
Programsats förväntas.
/StajlLinks 1.0/links_kategori.asp, rad 2
Function Randomizer () As Integer
-----------------------^
------------------
*brölar ljudligt*
mrblondeMedlem sedan aug. 20012 349 inlägg man kan inte definiera vad en funktion skall returnera i ASP.
dvs man kan inte skriva "As Integer"
hoppa över den biten så funkar det nog bättre.
Samma sak med Dim:ningen i funktionen, man kan inte skriva
"Dim x As Integer"
man får näja sig med "Dim x"
mvh mrBlonde
------------------
"Utan tvivel är man inte klok"
Tage Danielsson
ConnyFoxMedlem sedan aug. 20011 087 inlägg Ok tack MrBlonde, nu får jag inte fel på just den grejjen iaf ;) Men får fortfarande fel. kanske har lagt upp koden helt fel?!
Som sagt så är det Randomize scriptet som inte vill funka redigt =/
<%
Function Randomizer () Integer
Static AlreadyDone Integer
If AlreadyDone = False Then Randomize : AlreadyDone = True
Randomizer = 0
End Function
%>
<%
database = Server.MapPath("links.mdb")
Set Connection = Server.CreateObject("ADODB.Connection")
Connection.Open "driver={Microsoft Access Driver (*.mdb)};dbq="& database
Set RecSet = Server.CreateObject("ADODB.Recordset")
if Request.querystring("kategori") = "alla" then
SQL = "SELECT * FROM links ORDER BY linkname"
elseif Request.querystring("kategori") = "Senaste" then
SQL = "SELECT TOP 10 * FROM links ORDER BY datum DESC"
elseif Request.querystring("kategori") = "Top" then
SQL = "SELECT TOP 10 * FROM links ORDER BY klicks DESC"
elseif Request.querystring("kategori") = "random" then
SQL = "SELECT top 10 * from links where randomizer() = 0 order by rnd(isnull(links.question) * 0 + 1)"
else
SQL = "SELECT * FROM links WHERE kategori LIKE '"& Request.querystring("kategori") &"' ORDER BY datum DESC"
end if
RecSet.Open SQL, Connection, 3, 3
%>
------------------
*brölar ljudligt*
mrblondeMedlem sedan aug. 20012 349 inlägg <%
Dim AlreadyDone
AlreadyDone = False
Function Randomizer ()
If AlreadyDone = False Then Randomize : AlreadyDone = True
Randomizer = 0
End Function
%>
Så här bör nog koden vara för att det skall funka i vb script, static är inget som finns i vbscript.
"As Integer" är som sagt inget man kan göra i vbscript. Att bara ta bort "as" funkar inte heller.
:)
vassego!
------------------
"Utan tvivel är man inte klok"
Tage Danielsson
ConnyFoxMedlem sedan aug. 20011 087 inlägg Ok nu har jag kommit ett steg i rätt riktning iaf :o) Nu blir det inte fel på HELA sidan utan bara när man försöker anropa själva random som listningstyp..
Det blir fel på denna raden..
RecSet.Open SQL, Connection, 3, 3
Error :
Microsoft OLE DB Provider for ODBC Drivers fel '80040e14'
[Microsoft][Drivrutin för ODBC Microsoft Access] Odefinierad funktion 'randomizer' i uttryck.
/StajlLinks 1.0/links_kategori.asp, rad 35
------------------
*brölar ljudligt*
mrblondeMedlem sedan aug. 20012 349 inlägg fasen vet om det inte vore enklare att bara söka ut alla och sen göra om det till en array och slumpa ut 10 st ur array:en.
Har en känsla av att det borde gå fortare. Problemet blir iofs om du har många poster i links.
------------------
"Utan tvivel är man inte klok"
Tage Danielsson
ConnyFoxMedlem sedan aug. 20011 087 inlägg Nej jag har inte alls många inlägg och är villig att testa vilken annan lösning som helst bara det funkar ihop med min kod ;)
Här är HELA koden ifall du eller någon annan har lust o klura ut någon lösning!
<%
Dim AlreadyDone
AlreadyDone = False
Function Randomizer ()
If AlreadyDone = False Then Randomize : AlreadyDone = True
Randomizer = 0
End Function
%>
<%
database = Server.MapPath("links.mdb")
Set Connection = Server.CreateObject("ADODB.Connection")
Connection.Open "driver={Microsoft Access Driver (*.mdb)};dbq="& database
Set RecSet = Server.CreateObject("ADODB.Recordset")
if Request.querystring("kategori") = "alla" then
SQL = "SELECT * FROM links ORDER BY linkname"
elseif Request.querystring("kategori") = "Senaste" then
SQL = "SELECT TOP 10 * FROM links ORDER BY datum DESC"
elseif Request.querystring("kategori") = "Top" then
SQL = "SELECT TOP 10 * FROM links ORDER BY klicks DESC"
elseif Request.querystring("kategori") = "random" then
SQL = "SELECT top 10 * from links where randomizer() = 0 order by rnd(isnull(links.question) * 0 + 1)"
else
SQL = "SELECT * FROM links WHERE kategori LIKE '"& Request.querystring("kategori") &"' ORDER BY datum DESC"
end if
RecSet.Open SQL, Connection, 3, 3
%>
<html>
<head>
<title>Untitled</title>
<link rel="stylesheet" href="mall.css">
</head>
<body topmargin="0" leftmargin="0" class="iframe">
<center>
<table cellspacing="0" width="270"><tr><td>
<!--#include file="links_kategorier.asp" -->
<b>Kategori</b> : <%=request.querystring("kategori")%> - <b>Antal Inlägg</b> : <%=Recset.RecordCount%>
<%
Do until RecSet.EOF
%>
</td></tr><tr><td><hr>
<b><%
x = x+1
response.write x
%></b>.
<a href="links_klicks.asp?ID=<%=RecSet("ID")%>&URL=<%=RecSet("link")%>" target="newwindow"><%=RecSet("linkname")%></a> - <%=RecSet("klicks")%>st klick<br>
<b>Kategori </b>: <%=RecSet("kategori")%><br>
<b>Insänd av</b> : <%=RecSet("namn")%><br>
<b>Beskrivning</b> : <%=RecSet("beskrivning")%>
</td></tr><tr><td>
<%
if Session("inloggad") = True then %>
- <a href="links_form.asp?ID=<%=RecSet("ID")%>" target="change">Ändra</a>
- <a href="links_funktioner.asp?ID=<%=RecSet("ID")%>&funktion=delete&kategori=<%=RecSet("kategori")%>">Ta Bort</a> -
<% end if %>
</td></tr>
<%
RecSet.MoveNext
loop
RecSet.Close
connection.Close
%>
</table>
</body>
</html>
------------------
*brölar ljudligt*
mrblondeMedlem sedan aug. 20012 349 inlägg jag pallar inte skriva lösningen åt dig, men jag kan ge lite riktlinjer för ett sätt man kan lösa det på.
Sök ut alla posterna i links, typ "select *"
ös över dem i en array med getrows.
slumpa 10 st olika id mellan 0 och hur lång din array blev (får du ut med Ubound(arrayen))
Spara dessa 10 slumpade värden i en ny array.
loopa igenom den nya arrayen
for i=0 to ubound(nyarray)
skriv ut gammalarray[nyarray]
next
på så sätt får du fram 10 slumpade rader ur tabellen.
Vassego!
------------------
"Utan tvivel är man inte klok"
Tage Danielsson
ToonsterMedlem sedan feb. 20001 590 inlägg För att göra det hela lite mindre resurskrävande, så är detta mitt tips.
Jag utgår från att alla frågor är indexerade typ 1,2,3,n
1. Kolla upp först hur många frågor som finns.
2. Slumpa efter detta ut 10 värden baserat på hur många frågor det fanns, spara dessa 10 värden i en array. Spara arrayen i en sessionsvariabel.
3. Hämta frågorna en efter en ur databasen, allt eftersom de behövs. Markera de frågor som är gjorda i arrayen. Ifall något går snett, kan man återuppta "provet" där man avslutade.
På detta sätt är databasaccessen minimerad, och de frågor man gjort är markerade.
/T
------------------
Jensen Ambassadör, mitt bästa köp! www.jensen.no
[Redigerat av Toonster den 07 dec 2001]
ConnyFoxMedlem sedan aug. 20011 087 inlägg Ok som sagt så är jag ganska rejält nybörjare och har typ ingen aning om hur man gör detta ;) Saken e den att det måste funka med min kod och att det inte blir allt för mycket kod o skriva.. den funktionen jag hadde men som inte funkade verkar bra.. om den bara hadde funkat så.. ;) Ingen som vet hur man ficksar den eller kan ge mig alternativ kod?
Koden finns längre upp!
------------------
*brölar ljudligt*
PatrikBMedlem sedan mars 20002 836 inlägg
För att göra det hela lite mindre resurskrävande, så är detta mitt tips.
Jag utgår från att alla frågor är indexerade typ 1,2,3,n
E inte en "bullet proof" lösning för jag antar att poster kan tas bort vid behov och då blir indexeringen i detta fall "fucked up".
Jag håller oxå på mrblonde's lösning med array, fast det kräver ju "lite" omkodning :e
cya,
PatrikB
------------------
'## -- second place is the first looser -- ##'
PatrikBMedlem sedan mars 20002 836 inlägg <HTML>
<HEAD>
<TITLE>Visa slumpvis valda poster från databas</TITLE>
<META http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</HEAD>
<BODY bgcolor="#FFFFFF" text="#000000">
<%
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("members.mdb")
strSQL = "SELECT * FROM Members"
Set objRS = objConn.Execute(strSQL)
If Not objRS.EOF Then
arrPosts = objRS.GetRows()
End If
Set objRS = Nothing
objConn.Close
Set objConn = Nothing
%>
<P>Visa 5 slumpvis valda poster från databasen:<BR>
<%
'## -- slumpa fram 5 st olika poster --
Call randomMultiplePosts(5,arrPosts)
%>
</P>
</BODY>
</HTML>
<%
'-----------------------------------------------------------------------------
'## -- visa antal slumpmässigt valda poster från databas.
'## -- Argumentet [intShow] är ett heltal från 1 till så många poster man vill
'## visa slumpmässigt.
'##
'## -- Argumentet [varArray] som en 2-dimensionell array med dessa uppgifter:
'## Value 1, Pos N : varArray(0,N)
'## Value 2, Pos N : varArray(1,N)
'-----------------------------------------------------------------------------
Sub randomMultiplePosts(ByVal intShow, ByVal varArray)
'## -- kolla om det är en array som kommer som argument --
If IsArray(varArray) Then
Dim intLength, intRndNumber, N, intArrLength
Dim varTempArray()
'## -- arrayens storlek --
intArrLength = UBound(varArray,2) - N
'## -- kontrollera så att inte fler poster har valts än det finns
'## poster i databasen --
If CLng(intArrLength) <= CLng(intShow) Then
intShow = intArrLength
End If
'## -- slumpa ut intShow poster från databasen/arrayen --
For N = 0 To intShow - 1
intLength = intArrLength - N
ReDim Preserve varTempArray(1,N)
'## -- slumpa post --
intRndNumber = CLng(rnd*intLength)
'## -- spar slumpade värdena i en temp array --
varTempArray(0,N) = varArray(0,intRndNumber)
varTempArray(1,N) = varArray(1,intRndNumber)
'## -- skriv över nyss vald post med den sista posten --
varArray(0,intRndNumber) = varArray(0,intLength)
varArray(1,intRndNumber) = varArray(1,intLength)
Next
N = 0
For N = 0 To UBound(varTempArray,2)
Response.Write "<A href=""showMember.asp?membID=" & varTempArray(0,N) & """>" & varTempArray(1,N) & "</A><BR>"
Next
Else
'## -- ingen array. visa felmeddelande för besökaren. --
Response.Write "N/A"
End If
End Sub
%>
Detta kan du labba med. du får ändra sql-frågan så att det passar dig, likadant med utskriften.
Återkom med frågor på det du inte förstår
cya,
PatrikB
------------------
'## -- second place is the first looser -- ##'
[Redigerat av PatrikB den 11 dec 2001]
ConnyFoxMedlem sedan aug. 20011 087 inlägg Tack ditt script funkade fin fint, ett problem bara.. jag får fram samma random hela tiden :o) Och tyvär rkommer jag nog inte kunna använda koden, för d första förstår jag den inte (jag e ju nybörjare så..) och för det andra fungerar den inte ihop med min kod..
d ultimata skulle ju vara o kunna ta typ
select top 10 * from links order by RANDOM
eller liknande.. blir för mycket kod o massa som jag inte föstår mig på ;)
------------------
*brölar ljudligt*
icaaqMedlem sedan okt. 20005 273 inlägg Jag testade just ditt script PatrikB...men jag får också bara samma post hela tiden .. :(
------------------
kolung.....det tål att tänkas på!
icaaqMedlem sedan okt. 20005 273 inlägg Som sagt jag fick samma post hela tiden ...
PatrikB var har du din Randomize i koden?
------------------
kolung.....det tål att tänkas på!
PatrikBMedlem sedan mars 20002 836 inlägg he, he ... tänk så det kan bli när man klipper o klistrar!
Men icaaq!!!, det boooorde du ju kunnat lista ut var Randomize skulle vara ;e
ReDim Preserve varTempArray(1,N)
[b]Randomize[/b]
'## -- slumpa post --
intRndNumber = CLng(rnd*intLength)
ConnyFox:
Sa ju att du skulle få koda om lite .... och du skulle kunna implementera denna metod på ditt script.
Sök efter 2-dimensionella arrayer, finns massor om dem här eller så kikar du in på www.webeye.nu där det oxå står en del om arrayer.
cya,
PatrikB
------------------
'## -- second place is the first looser -- ##'
icaaqMedlem sedan okt. 20005 273 inlägg joo.....Jag har redan fixat ett eget litet script....(skulle bara ha en post) ;)
men tänk så länge jag funderade :OO
------------------
kolung.....det tål att tänkas på!
ConnyFoxMedlem sedan aug. 20011 087 inlägg Blir lättare o skippa det ;) kanske tar o lär mig det senare när jag behöver det bättre, folk som känner mig kallar mig lat o det kan mycket väl stämma *påpekar att jag sov till klockan fem idag*
------------------
*brölar ljudligt*
Jag sökte själv efter något svar på om det enkelt gick att slumpa fram random poster ur en Access databas. Fick inte något riktigt svar ur tråden och så slår det mig att jag gjorde någon random liknande historia tidigare. Vet inte om detta är den slutgiltiga lösningen jag valde men så här gjorde jag:
<%'===== skapar en array över alla filmer =====
'1 - Skapa en array över alla mediainfo där minst en film fil finns kopplad...
sql = " SELECT T_mediainfo.id, film_titel FROM T_mediainfo "
sql = sql & " INNER JOIN T_film_filer ON T_mediainfo.id = T_film_filer.movie_id "
' sql = "SELECT id, film_titel FROM T_mediainfo"
set rsArray = objConn.execute(sql)
if not rsArray.eof then
myArray = rsArray.GetRows()
end if
'2 - Skapar Random array movie id post...
randomize()
varUpperLimit = ubound(myArray,2)
' varLowerLimit = 0
' varRandomArrayNum = Int((varUpperLimit - varLowerLimit + 1)*Rnd() + varLowerLimit)
varRandomArrayIdNum = INT(RND*varUpperLimit)+1
'3 - Skapar och testar random +1
if sSelectedArrayId = "" then
sSelectedArrayId = varRandomArrayIdNum
end if
'response.write(sSelectedArrayId)
varPreviousMovieInfoId = myArray(0,sSelectedArrayId-1)
varCurrentMovieInfoId = myArray(0,varRandomArrayIdNum)
varNextMovieInfoId = myArray(0,sSelectedArrayId+1)
%>
:)