Hej, jag undrar om det finns någon som vet hur jag kan "slumpa" fram tex 5 st. rader ur en databas. jag håller på med att göra ett "banner script". Jag vet inte hur jag ska göra då ID nummret på räknaren börjar på 46 och jag vill inte att samma banner ska komma upp 2 ggr samtidigt!
Du kan ju titta på denna kod, som jag skrev åt brw.
<%
Dim maxNumber,strSQL,connection,rs,cnt,rndNumber,i,found
set connection = server.createobject("adodb.connection")
connection.open "dsn"
maxnumber = 5
strSQL = "SELECT namn,width FROM banner "
set rs = connection.execute(strSQL)
if not rs.eof then
arr = rs.getrows()
items = ubound(arr,2) + 1
if items < maxNumber then maxNumber = items
dim choosen()
redim choosen(maxnumber-1)
randomize
cnt = 0
Do Until cnt = maxnumber
RndNumber = Int(Rnd * items)
found = false
for i = 0 to cnt - 1
if choosen(i) = rndNumber then
found = true
exit for
end if
next
if not found then
choosen(cnt) = rndNumber
cnt = cnt + 1
response.write arr(0,rndNumber) & "<br>" & arr(1,rndNumber) & "<br>"
end if
loop
else
response.write "?"
end if
rs.Close
Set Rs = Nothing
connection.close
set connection = nothing
%>
Du får väl ändra öppningen av databasen och sql-satsen så att det stämmmer med dina tabeller
------------------ essentitia preter non sans multiplicandum
om jag vill hämta ut värden från fält i tabellen, kan jag då göra det genom att som vanligt skriva " & rs("fält") & " eller kräver det någon annan kod?
ex. jag vill utöver id:t hämta pris, namn, bildlänk
Hej,
Jag har ett fält i databasen som heter "weight" och som innehåller talet 1 - 10 ju högre talet är ju oftare vill jag att bannern ska visas. Är det någon som vet hur man kan implementera detta i koden ovan?
Om det skulle vara någon som är intresserad så har jag löst det så här:
...
Dim arr : arr = objRS.getrows()
objRS.Close : Set objRS = Nothing
Items = ubound(arr,2) + 1
If Items < maxBanner then maxBanner = Items
Dim sumWeight : sumWeight = 0
for i = 0 to ubound(arr,2)
sumWeight = sumWeight + arr(6,i)
next
cnt = 0
Dim strUsed, arrUsed
strUsed = ","
Do Until cnt = maxBanner
Randomize
Dim nWeight
nWeight = Int((sumWeight * Rnd) + 1)
Dim nValue : nValue = 0
for i = 0 to ubound(arr,2)
if nValue + arr(6,i) >= nWeight then exit for
nValue = nValue + arr(6,i)
Next
Dim bUsed : bUsed = "False"
Dim u
arrUsed = Split(strUsed,",")
For u = 0 To ubound(arrUsed)
if arrUsed(u) = Cstr(arr(0,i)) then
bUsed = "True"
exit For
End if
Next
IF bUsed = "False" Then
strUsed = strUsed & arr(0,i) & ","
Response.Write "Visa bannern"
cnt = cnt + 1
End IF
Loop
Ska slumpa ut en post från tabel i Access. Vill att tre fält ska visas, det funkar bra på dom två första, bilden och rubriken funkar, men inte själva texten den blir alltid den fösta postens text.
vad kan var fel?
<%
'objConnect.open "dsn"
maxnumber = 2
SQL = "SELECT fldBild, fldRubrik, fldText FROM tblSlumpBild;"
objConnect.Open(ConnString)
objRS.Open(SQL), ConnString
If Not objRS.Eof Then
arr = objRS.getrows()
items = Ubound(arr,2) + 1
If items < maxNumber Then maxNumber = items
Dim choosen()
ReDim choosen(maxnumber-1)
Randomize
cnt = 0
Do Until cnt = maxnumber
RndNumber = Int(Rnd * items)
found = False
For i = 0 to cnt - 1
If choosen(i) = rndNumber Then
found = True
Exit For
End If
Next
If Not found Then
choosen(cnt) = rndNumber
cnt = cnt + 1
Response.Write "<img src=""bilderDjurDefault/" & arr(0,rndNumber) & """ alt="" "" width=""400"" height=""200"" border=""0"" class=""ContentDjurTop""><h1>" & arr(1,rndNumber) & "</h1><h3>" & arr(2,rnNumber) & "</h3>"
End If
Loop
Else
Response.Write ""
End If
objRS.Close
%>
Jo det var ett stavfel, tack J.N. för hjälpen att du fan det!
Ingen Option Explicit är med, är inte haj på hur detta med fram slupning fungerar, är första gången jag testar det. Då lär mig gärna mer om hur det fungerar...
Option Explicit har inte med slumpning att göra, det handlar om dimensionering och kontroll av vilka variabler man använder.
Testa detta:
<%
Option Explicit
Dim a
a = 3
response.write a
%>
Om du sätter en fnutt framför Dim a, får du fel: "Variable is undefined: 'a'"
I ditt fall borde du fått "Variable is undefined: 'rnNumber'"
I din nuvarande kod måste du endast dimensionera arrayer, men i fortsättningen kommer alla variabler att behöva deklareras. Din bonus är att man slipper irriterande slarvfel.
Det finns en skillnad hur man dim:ar arryer, men det lär man sig snabbt:
<%
Option Explicit
Dim a(2) 'siffra
a(1)=34
a(0)=44
response.write a(1)
%>
resp
<%
Option Explicit
Dim a 'ingen siffra
a = array(34,6,74)
response.write a(2)
%>