D david Medlem sedan dec. 1999 49 inlägg Frågan 12 juni 2002 21:45 #1 Jag vill ha ut 10 st slumpade, unika tal som motsvarar ID:n i en databas. Vill alltså få ut 10 st unika, slumpvalda, rader ur en databas i Access. Har kollat runt här i forumet, men har inte fått något att fungera.
Har alltså en DB med fälten 'ID' och 'Fraga'. Det finns totalt ca 20 poster i databasen, med ID från 1 - 20. Men Detta kan komma att ändras om någon fråga tas bort. Vill alltså slumpa ut värdet i 'Fraga' tio gånger utan att 'Fraga' upprepar sig.
Puhhhh!
Är det någon som är haj på detta och har lust att hjälpa mig lite? :birp
S solbulle Medlem sedan mars 2001 5 287 inlägg P PatrikB Medlem sedan mars 2000 2 836 inlägg D david Medlem sedan dec. 1999 49 inlägg Hej igen!
Har ju försökt men inte fått något att fungera. Jag är väl lite dum i huvet eller så jobbar jag för mycket. PatrikB, du verkar ha lite koll, försökte ladda ner ditt script clsArray, men din domän verkar vara nere...
Du har inte lust att maila den till mig på david.hagg@home.se ?
Tack tack!
D david Medlem sedan dec. 1999 49 inlägg Har fått det att fungera ungefär som jag vill ha det. Ett problem kvar bara: en post får bara förekomma en gång.
<%
for i = 0 to 9
Set Connection = Server.CreateObject("ADODB.Connection")
Connection.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("test.mdb")
Set rsCount = Connection.Execute("SELECT Count(ID) AS intWordCount FROM tabell")
intWordCount = rsCount("intWordCount") - 1
rsCount.Close
Set rsCount = Nothing
Set rsOrd = Connection.Execute("SELECT * FROM tabell")
arrOrd = rsOrd.GetRows()
rsOrd.Close
Set rsOrd = Nothing
Randomize
intRndOrd = rnd() * intWordCount
'** ID skrivs arrOrd(0,Round(intRndOrd))
Response.Write arrOrd(1,Round(intRndOrd)) & " "
Response.Write arrOrd(2,Round(intRndOrd)) & "<br>"
Connection.Close
Set Connection = Nothing
next
%>
Någon som vet hur man kan spara att ett ID redan har visats en gång och därmed hoppa över detta ID?
D david Medlem sedan dec. 1999 49 inlägg Har äntligen fått det att fungera som jag ville, efter många timmars knackande på det numera söndernötta tangentbordet!
<%
Set Connection = Server.CreateObject("ADODB.Connection")
Connection.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("databas.mdb")
Set rsCount = Connection.Execute("SELECT Count(ID) AS intWordCount FROM Fraga")
intWordCount = rsCount("intWordCount") - 1
rsCount.Close
Set rsCount = Nothing
Set rsOrd = Connection.Execute("SELECT * FROM Fraga ORDER BY ID DESC")
arrOrd = rsOrd.GetRows()
rsOrd.Close
Set rsOrd = Nothing
for i = 0 to 9
Randomize
intRndOrd = rnd() * intWordCount
if firstTime = true then
if inStr(myArray, round(intRndOrd)) > 0 then
do until inStr(myArray, round(intRndOrd)) = 0
Randomize
intRndOrd = rnd() * intWordCount
loop
myArray = myArray & "," & round(intRndOrd)
else
myArray = myArray & "," & round(intRndOrd)
end if
else
myArray = round(intRndOrd)
firstTime = true
end if
next
myArray = split(myArray, ",")
cntID = 1
for i = 0 to 9
Response.Write cntID & " "
Response.Write arrOrd(3,myArray(i)) & " "
Response.Write arrOrd(4,myArray(i)) & " "
Response.Write arrOrd(5,myArray(i)) & " "
Response.Write arrOrd(6,myArray(i)) & " "
Response.Write arrOrd(7,myArray(i)) & "<br>"
cntID = cntID + 1
next
Connection.Close
Set Connection = Nothing
%>
Kanske inte är världens mest effektiva sätt att göra det på, men det fungerar och det är ju kul för mig!