Avatar billede Slettet bruger
25. september 2002 - 22:34 Der er 16 kommentarer og
1 løsning

randomize

Hej eksperter....

jeg har et udtræk fra min db, der tæller antal poster, men ved ikke lige hvordan jag skal få den til at lave noget tilfældig udvælgelse af det....

jeg tænkte noget med at den skulle tage imellem

1 og rs("ialt")

men hvordan får man den til det ?


håber i kan hjælpe.

mvh.
Questis.dk
Avatar billede coltau Juniormester
25. september 2002 - 22:41 #1
Denne kode vælger 2 poster der ikke er ens.

set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("test.mdb")
set RS = Server.CreateObject("ADODB.Recordset")
RS.CursorLocation = 3 ' adUseClient
RS.CursorType = 3 ' adOpenStatic
RS.Open "select * from tabeluge", Conn, , , &H0001 ' adCmdText

if not RS.EOF then
  randomize
  P1 = int(RS.RecordCount * rnd)
  RS.Move(P1)
  strNavn1 = RS("id")
  RS.MoveFirst
  do
    P2 = int(RS.RecordCount * rnd)
  loop until (P1 <> P2)
  RS.Move(P2)
  strNavn2 = RS("id")
  response.write("1=" & strNavn1 & "<br> 2=" & strNavn2)
end if
Avatar billede eagleeye Praktikant
25. september 2002 - 22:42 #2
Jeg har brugt dette til at vælge en random record fra en database...:

<%
Set rs = Server.CreateObject("ADODB.RecordSet")
strSQL = "SELECT * FROM randomText"
rs.Open strSQL, Conn, 3, 1
rndMax = rs.RecordCount
Randomize
rndNumber = Int((RND * rndMax))  'Find et random nummer
rs.Move rndNumber 'Flyt til den valgte record

Response.Write rs("visDetteTekst") 'udskriver her

rs.Close
Set rs = Nothing
%>
Avatar billede Slettet bruger
25. september 2002 - 22:43 #3
hmmmm..... tror jeg ikke lige jeg fik fat i.....

det den skal er at tage én af posterne tilfældigt fra databasen, deter det eneste den skal gør...... hvad du skrev kan jeg ikke lige forstå &:-)
Avatar billede coltau Juniormester
25. september 2002 - 22:45 #4
Vælg en tilfældig post.

set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("test.mdb")
set RS = Server.CreateObject("ADODB.Recordset")
RS.CursorLocation = 3 ' adUseClient
RS.CursorType = 3 ' adOpenStatic
RS.Open "select * from tabeluge", Conn, , , &H0001 ' adCmdText

if not RS.EOF then
  randomize
  P1 = int(RS.RecordCount * rnd)
  RS.Move(P1)
  strNavn1 = RS("id")
  response.write(strNavn1 & "<br>")
end if
Avatar billede Slettet bruger
25. september 2002 - 22:53 #5
eagleeye>>

jeg har dette:

<%
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("banner.mdb")
Conn.Open DSN


strSQL = "SELECT * FROM ads"
set rs = conn.execute(strSQL)

rndMax = rs.RecordCount
Randomize
rndNumber = Int((RND * rndMax))  'Find et random nummer
rs.Move rndNumber 'Flyt til den valgte record

Response.Write rs("id") 'udskriver her

Set rs = Nothing

conn.close
set conn = nothing
%>

men får denne fejl:

Rowset does not support fetching backward.

linie 13 = rs.Move rndNumber 'Flyt til den valgte record
Avatar billede Slettet bruger
25. september 2002 - 22:58 #6
glem det... fik clotau's til at virke i første hug &:-)

takker for det coltau
Avatar billede Slettet bruger
25. september 2002 - 23:00 #7
coltau>>

kunne jeg få dig til at forklare lidt hvad der sker, så jeg ikke spørger vileløst igen en anden gang ?
Avatar billede eagleeye Praktikant
25. september 2002 - 23:00 #8
hvis du havde pastede hele min kode ind og ikke kun uddrag af min kode vil det også havde virket i første omgang ... :)
Avatar billede Slettet bruger
25. september 2002 - 23:02 #9
nope eagle.... prøvede det, men fik den ene fejl efter den anden ..... ved ikke lighe hvad der gik galt.... først påstod den at rs. ikke var gyldig komando der
Avatar billede eagleeye Praktikant
25. september 2002 - 23:05 #10
Det du har vist kan jeg da se det ikke er hele koden...
Denne linie  rs.Open strSQL, Conn, 3, 1  er  rette i det du viser og du har slettet denne linie..: Set rs = Server.CreateObject("ADODB.RecordSet")
Det har du bare ikke gjort i coltau kode...
Avatar billede Slettet bruger
25. september 2002 - 23:09 #11
sorry eagleeye>> mig der keglede....

men hvis du vil være sød at forklare din funktion så jeg ikke spørger igen i morgen sender jeg da lige dig 50 point som tak.....

er ked af beskyldningen....
Avatar billede eagleeye Praktikant
25. september 2002 - 23:10 #12
nej nej ...
Avatar billede Slettet bruger
25. september 2002 - 23:11 #13
Nå men så må jeg jo selv prøve at hitte ud af hvad den går ud på
Avatar billede eagleeye Praktikant
25. september 2002 - 23:15 #14
Jeg vil gerne forkalare den.:


<%
'Opretter et object af typen recordset.
Set rs = Server.CreateObject("ADODB.RecordSet")
'SQL som hendter de record som skal vælges imellem
strSQL = "SELECT * FROM randomText"
'Åbner recordsetet. Det åbned med rs.Open da det understytter recordCount og move.
rs.Open strSQL, Conn, 3, 1
'rs.RecordCount indeholder antallet at records som er i recordset/databasen
rndMax = rs.RecordCount
'Kalder Randomize function som gør rnd bliver noget nyt hver gang.
Randomize
'Finder et tilføldig tal mellem 0 og RecordCount-1
rndNumber = Int((RND * rndMax)) 
'Flytter X antal poster frem til den som er tilfældigt udvalgt.
'Hvis tal = 0 er det den første reccord som udskriver
'Hvis tal = 1 er det den anden record som udskrives
rs.Move rndNumber 'Flyt til den valgte record

'Udskriv fra recordset'et
Response.Write rs("visDetteTekst")

rs.Close
Set rs = Nothing
%>
Avatar billede eagleeye Praktikant
25. september 2002 - 23:18 #15
hov nej nej var til at oprette et spørgsmål med 50 points for det :)

pyt med points det var mere at det min kode ikke virkede, jeg har selv haft samme kode til at virker på en side så det skulle jo meget gerne virke ;)
Avatar billede coltau Juniormester
25. september 2002 - 23:18 #16
Jeg ved ikke hvormeget forklaring du ønsker men her er lidt.

set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("test.mdb")
set RS = Server.CreateObject("ADODB.Recordset")
RS.CursorLocation = 3 ' adUseClient
RS.CursorType = 3 ' adOpenStatic
RS.Open "select * from tabeluge", Conn, , , &H0001 ' adCmdText

' Ovenstående linier åbner et statisk recordset, hvor alle Move-kommandoerne virker. Normalt er det kun Forward reading dvs. MoveNext der virker.

if not RS.EOF then ' Hvis der er nogle at vælge i mellem
  randomize
  P1 = int(RS.RecordCount * rnd) ' Vælg et tilfældig tal mellem 0 og antal records i tabellen
  RS.Move(P1) ' Flyt direkte til den valgte record
  strNavn1 = RS("id")
  response.write(strNavn1 & "<br>")
end if
Avatar billede Slettet bruger
25. september 2002 - 23:19 #17
takker mange gange... men hvis du vil have point, må du råbe højt. jeg er meget ked af det der skete. er ikke helt fair
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester