Fan...
Detta forumet är inte till att användas som någon personlig chatt.
Dra iväg ett mail till grabben i så fall!
14 svar · 241 visningar · startad av Mz
Lite loopar och så
Inlägg: http://cgi.webforum.nu/wf/Forum11/HTML/000282.html
Din kod:
<%
Dim links()
Dim counter,i,found
SQL = "select count(*) AS count_lankar from lankar"
Set RS_count_lankar = databas.Execute(SQL)
Randomize
counter = 0
do
link = Int(rnd*RS_count_lankar("count_lankar"))-1
found = 0
for i = 0 to counter
if links(i) = link then
found = 1
exit for
end if
next
if found = 0 then
links(counter) = link
counter = counter -- 1
end if
if counter = 6 then
exit do
end if
loop
SQL = "Select * from lankar"
Set RSdbase = Server.CreateObject("ADODB.Recordset")
RSdbase.open SQL, Session("dbasepath"),adLockPessimistic,adOpenKeyset
for i = 0 to 5
RSdbase.Move links(i)
url = RSdbase("lank")
lank_namn = RSdbase("namn")
lank_beskriv = RSdbase("beskrivning")
'gör något med länk
next
%>
Jag får följande meddelande:
Körningsfel i Microsoft VBScript (0x800A0009)
Felaktigt matrisindex
/Tester/slump/default.asp, line 20
Min kod:
<html><body>
<%
strDbPath = Server.Mappath("test.mdb")
Set databas = Server.CreateObject("ADODB.Connection")
databas.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source ="& Server.MapPath("test.mdb")
Dim links()
Dim counter,i,found
SQL = "select count(*) AS count_lankar from tester"
Set RS_count_lankar = databas.Execute(SQL)
Randomize
counter = 0
do
link = Int(rnd*RS_count_lankar("count_lankar"))-1
found = 0
for i = 0 to counter
[b]if links(i) = link then[/b]
found = 1
exit for
end if
next
if found = 0 then
links(counter) = link
counter = counter -- 1
end if
if counter = 6 then
exit do
end if
loop
SQL = "Select * from tester"
Set RSdbase = Server.CreateObject("ADODB.Recordset")
RSdbase.open SQL, strDbPath, adLockPessimistic, adOpenKeyset
for i = 0 to 5
RSdbase.Move links(i)
Response.Write RSdbase("t1")
next
RS_count_lankar.Close
Set RS_count_lankar = Nothing
RSdbase.Close
Set RSdbase = Nothing
databas.Close
Set databas = Nothing
%>
</body></html>
Den feta texten är rad 20.
Skulle du kunna ge mig en hjälpande hand?
Jag försöker slumpa flera länkar (gärna 10) från en databas..
Tack på förhand.
------------------
~ Mz ~
Fan...
Detta forumet är inte till att användas som någon personlig chatt.
Dra iväg ett mail till grabben i så fall!
Såja Eclipse. Jag föredrar att det blir en tråd här än att jag får mail.
<%
Dim links()
Dim counter,i,found
SQL = "select count(*) AS count_lankar from lankar"
Set RS_count_lankar = databas.Execute(SQL)
Randomize
counter = 0
do
link = Int(rnd*RS_count_lankar("count_lankar"))-1
found = 0
for i = 0 to counter
if links(i) = link then
found = 1
exit for
end if
next
if found = 0 then
links(counter) = link
counter = counter -- 1
end if
if counter = 6 then
exit do
end if
loop
SQL = "Select * from lankar"
Set RSdbase = Server.CreateObject("ADODB.Recordset")
RSdbase.open SQL, Session("dbasepath"),adLockPessimistic,adOpenKeyset
for i = 0 to 5
RSdbase.Move links(i)
url = RSdbase("lank")
lank_namn = RSdbase("namn")
lank_beskriv = RSdbase("beskrivning")
'gör något med länk
next
%>
--------------------------------------------------------------------------------
Jag får följande meddelande:
Körningsfel i Microsoft VBScript (0x800A0009)
Felaktigt matrisindex
/Tester/slump/default.asp, line 20
Min kod:
Kod:
--------------------------------------------------------------------------------
<html><body>
<%
strDbPath = Server.Mappath("test.mdb")
Set databas = Server.CreateObject("ADODB.Connection")
databas.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source ="& Server.MapPath("test.mdb")
Dim links()
Dim counter,i,found
SQL = "select count(*) AS count_lankar from tester"
Set RS_count_lankar = databas.Execute(SQL)
Randomize
counter = 0
do
link = Int(rnd*RS_count_lankar("count_lankar"))-1
found = 0
for i = 0 to counter [b]- 1 [/b]
if links(i) = link then
found = 1
exit for
end if
next
if found = 0 then
links(counter) = link
counter = counter -- 1
end if
if counter = 6 then
exit do
end if
loop
SQL = "Select * from tester"
Set RSdbase = Server.CreateObject("ADODB.Recordset")
RSdbase.open SQL, strDbPath, adLockPessimistic, adOpenKeyset
for i = 0 to 5
RSdbase.Move links(i)
Response.Write RSdbase("t1")
next
RS_count_lankar.Close
Set RS_count_lankar = Nothing
RSdbase.Close
Set RSdbase = Nothing
databas.Close
Set databas = Nothing
%>
</body></html>
Du kan ju testa med detta.
------------------
essentitia preter non sans multiplicandum
Eclipse:
Jag trodde detta forum fanns för att man skulle kunna få svar på sina ev. frågor.. förlåt om jag misstog mig.
Eftersom det var LarsGs kod så tillfrågade honom, detta eftersom jag antog att han kände igen koden bättre än någon annan.
JANspeed:
Se texten ovan... ;)
LarsG:
Nja, samma felmeddelande igen, dock på ny rad:
Körningsfel i Microsoft VBScript (0x800A0009)
Felaktigt matrisindex
/tester/slump/Default.asp, line 26
if found = 0 then
[b]links(counter) = link[/b]
counter = counter -- 1
end if
------------------
~ Mz ~
Hmm, jag skrev ju att den var otestad. Det är väl enklast att dimma links på en gång.
<html><body>
<%
strDbPath = Server.Mappath("test.mdb")
Set databas = Server.CreateObject("ADODB.Connection")
databas.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source ="& Server.MapPath("test.mdb")
Dim links([b]5[/b])
Dim counter,i,found
SQL = "select count(*) AS count_lankar from tester"
Set RS_count_lankar = databas.Execute(SQL)
Randomize
counter = 0
do
link = Int(rnd*RS_count_lankar("count_lankar"))-1
found = 0
for i = 0 to counter - 1
if links(i) = link then
found = 1
exit for
end if
next
if found = 0 then
links(counter) = link
counter = counter -- 1
end if
if counter = 6 then
exit do
end if
loop
SQL = "Select * from tester"
Set RSdbase = Server.CreateObject("ADODB.Recordset")
RSdbase.open SQL, strDbPath, adLockPessimistic, adOpenKeyset
for i = 0 to 5
RSdbase.Move links(i)
Response.Write RSdbase("t1")
next
RS_count_lankar.Close
Set RS_count_lankar = Nothing
RSdbase.Close
Set RSdbase = Nothing
databas.Close
Set databas = Nothing
%>
</body></html>
------------------
essentitia preter non sans multiplicandum
Självklart hajar jag att det var hans kod och därför frågar du honom. Men det är ju dumt att formulera sig så begränsande så därför ville jag retas lite. :p
Vem vet. Lasseponken kanske hade varit bortrest. Då hade du ju kanske aldrig fått nått svar. :)
Janspeed: Självklart uppskattar jag all form av hjälp. :h
LarsG:
Jo jag läste att den var otestad men jag är i stort behov av att få detta att fungera och FOR-satser är inte min starka sida så jag klarar det inte på egen hand,dessutom är ju detta ett ypperligt läge att testa koden. ;)
Jag har nu följt dina instruktioner men får ett nytt felmeddelande:
ADODB.Field (0x80020009)
Antingen är BOF eller EOF satt till True, eller så har aktuell post raderats. Den begärda åtgärden kräver en aktuell post.
/Tester/slump/default.asp
Kolumnen t1 har 50 poster i sig och min kod ser nu ut så här:
<html><body>
<!--#include file="adovbs.inc"-->
<%
Dim counter,i,found, links(5), link
Set databas = Server.CreateObject("ADODB.Connection")
databas.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source ="& Server.MapPath("test.mdb")
SQL = "select count(t1) AS count_lankar from tester"
Set RS_count_lankar = databas.Execute(SQL)
Randomize
counter = 0
do
link = Int(rnd*RS_count_lankar("count_lankar")) - 1
found = 0
for i = 0 to counter - 1
if links(i) = link then
found = 1
exit for
end if
next
if found = 0 then
links(counter) = link
counter = counter -- 1
end if
if counter = 6 then
exit do
end if
loop
SQL = "Select t1 from tester"
Set RSdbase = Server.CreateObject("ADODB.Recordset")
RSdbase.open SQL, "Provider=Microsoft.Jet.OLEDB.4.0;Data Source ="& Server.MapPath("test.mdb"), adLockPessimistic, adOpenKeyset
for i = 0 to 5
RSdbase.Move links(i)
Response.Write RSdbase("t1")
next
RS_count_lankar.Close
Set RS_count_lankar = Nothing
RSdbase.Close
Set RSdbase = Nothing
databas.Close
Set databas = Nothing
%>
</body></html>
Några förslag?
Uppskattar verkligen din hjälp! :)
------------------
~ Mz ~
SQL = "Select t1 from tester"
Set RSdbase = Server.CreateObject("ADODB.Recordset")
RSdbase.open SQL, "Provider=Microsoft.Jet.OLEDB.4.0;Data Source ="& Server.MapPath("test.mdb"), adLockPessimistic, adOpenKeyset
for i = 0 to 5
[b]RSdbase.movefirst
RSdbase.Move links(i)-1[/b]
Response.Write RSdbase("t1")
next
Move fungerar ju så att man förflyttar sig i förhållande till nuvarande record och därför så hamande man utanför.
------------------
essentitia preter non sans multiplicandum
[Redigerat av LarsG den 06 sep 2001]
Tyvärr så kvarstår samma felmeddelande.
ADODB.Field (0x80020009)
Antingen är BOF eller EOF satt till True, eller så har aktuell post raderats. Den begärda åtgärden kräver en aktuell post.
/Tester/slump/default.asp
SQL = "Select t1 from tester"
Set RSdbase = Server.CreateObject("ADODB.Recordset")
RSdbase.open SQL, "Provider=Microsoft.Jet.OLEDB.4.0;Data Source ="& Server.MapPath("test.mdb"), adLockPessimistic, adOpenKeyset
for i = 0 to 5
RSdbase.movefirst
RSdbase.Move links(i) - 1
Response.Write RSdbase("t1")
next
------------------
~ Mz ~
Ok, nya tappra försök.
Kan du lägga in lite debugutskrifter
så jag ser vad som händer.
for i = 0 to 5
RSdbase.movefirst
response.write i & ":" & links(i) & "<br>"
RSdbase.Move links(i)
Response.Write RSdbase("t1")
next
red: Jag tog bort -1 vid anropet till move också.
------------------
essentitia preter non sans multiplicandum
[Redigerat av LarsG den 06 sep 2001]
Jag får fortfarande samma felmeddelande... :l
Kan du lägga in lite debugutskrifter så jag ser vad som händer.
Hänger inte med.. ;)
Vad menar du med detta?
------------------
~ Mz ~
Jag menar att du lägger in anrop till response.write (som jag gjorde i kodsnutten ovan) med t.ex. värden på olika variabler så går det att se vad som händer.
------------------
essentitia preter non sans multiplicandum
Jag lyckades... den slumpar i alla fall 10 länkar nu. :)
Är väl förmodligen inte helt korrekt men det fungerar.
Så här gjorde jag:
<%
Dim Connect, SQL, RecSet, strPosts, strRandom, i
' ### Räkna antal poster i databasen
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source = "& Server.MapPath("test.mdb")
SQL = "SELECT Count(ID) AS rsPosts FROM tester"
Set RecSet = Connect.Execute(SQL)
strPosts = RecSet("rsPosts")
RecSet.Close
For i = 1 to 10
' ### Ta fram en slumpad post
Set RecSet = Connect.Execute("SELECT Namn FROM tester ORDER BY ID DESC")
Randomize
strRandom = Int(RND*strPosts) - 1
Do While strRandom >= 0
RecSet.MoveNext
strRandom = strRandom - 1
Loop
Response.Write "• <b>"& RecSet("Namn") &"</b><br>"
Next
RecSet.Close
Connect.Close
Set RecSet = Nothing
Set Connect = Nothing
%>
Det bli iofs dubletter ibland men det får jag leva med eftersom jag inte lyckas få bort dem...
------------------
~ Mz ~
[Redigerat av Mz den 10 sep 2001]