Avatar billede agg-zeus Nybegynder
02. august 2002 - 11:49 Der er 16 kommentarer og
1 løsning

Random recordset

Jeg har søgt på Eksperten og fundet følgende spm til at udskrive 4 tilfældige poster fra DB'en: http://www.eksperten.dk/spm/44303


Nedenfor har jeg så sat det sammen med mit eget script:

Dim Conn, DSN, RS, SQL, intCount, intIndex, Index


Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.mappath("db.mdb") & ""
Conn.Open DSN

sql = "SELECT COUNT(*) AS total FROM table;" ' count totalt posts
Set Rs = Conn.Execute(sql)
intCount = CInt(Rs("total"))

sql = "SELECT * FROM table;"
Set Rs = Conn.Execute(sql)

For Index = 1 To 4 ' find 4 random posts
    intIndex = Int(Rnd * intCount)

    Rs.Move intIndex

Response.Write "<tr><td valign='top' align='left' bgcolor='#336699'>" _  ' linie 43
& ":: <a href='minside.asp?afdeling="&RS("afdelingBy")&"' "_
& "onMouseOver=""window.status='"&RS("afdelingNavn")&"'; return true;"" " _
& "OnMouseOut=""window.status=''; return true;"">"&RS("afdelingNavn")&"</a></td></tr>"


Next


RS.close
set RS = nothing
Conn.close
set Conn = nothing

Men når jeg kører scriptet får jeg "Undtagelse opstod!" i linie 43 ! Linie 43 er min første Response.Write sætning... Hvad har jeg gjort galt ?
Avatar billede steen Nybegynder
02. august 2002 - 11:52 #1
Ret den til:

Response.Write "<tr><td valign='top' align='left' bgcolor='#336699'>" & _  ' linie 43
Avatar billede agg-zeus Nybegynder
02. august 2002 - 11:53 #2
hey Steen...

Det hjælper ikke..
Avatar billede steen Nybegynder
02. august 2002 - 11:58 #3
Har du prøvet at fjerne dine plinger ' ?

Response.Write "<tr><td valign=top align=left bgcolor=#336699>" & _
Avatar billede agg-zeus Nybegynder
02. august 2002 - 12:00 #4
Det er ikke dem der bugger... Response.Write sætningerne virker når jeg bruger SQL = "SELECT TOP 4 * FROM table" !!!
Avatar billede agg-zeus Nybegynder
02. august 2002 - 12:03 #5
HAr lige siddet og kigget fornævnte spm igennem og har fået det til at virke (næsten)

Dim Conn, DSN, RS, SQL, intCount, intIndex, Index


Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.mappath("db.mdb") & ""
Conn.Open DSN

sql = "SELECT COUNT(*) AS total FROM table;" ' count totalt posts
Set Rs = Conn.Execute(sql)
intCount = CInt(Rs("total"))

sql = "SELECT * FROM table;"
Set Rs = Conn.Execute(sql)

Randomize

For Index = 1 To 4 ' find 4 random posts
    intIndex = Int(Rnd * intCount)
Rs.MoveFirst
    Rs.Move intIndex

Response.Write "<tr><td valign='top' align='left' bgcolor='#336699'>" _  ' linie 43
& ":: <a href='minside.asp?afdeling="&RS("afdelingBy")&"' "_
& "onMouseOver=""window.status='"&RS("afdelingNavn")&"'; return true;"" " _
& "OnMouseOut=""window.status=''; return true;"">"&RS("afdelingNavn")&"</a></td></tr>"


Next


RS.close
set RS = nothing
Conn.close
set Conn = nothing

Den udskriver 4 poster som skifter hver gang siden reloades... Problemet er nu at 2 af de 4 poster er identiske ! Hvorfor ?
Avatar billede steen Nybegynder
02. august 2002 - 12:07 #6
er det hvergang?
Avatar billede agg-zeus Nybegynder
02. august 2002 - 12:08 #7
ja !
Avatar billede agg-zeus Nybegynder
02. august 2002 - 12:09 #8
hmm.. nu viste den 2 * 2 poster... altså 2 sæt der var ens ! f.eks.
1
2
1
2
Avatar billede steen Nybegynder
02. august 2002 - 12:10 #9
ok... er det det faste mønster

f.eks:
2
8
2
8
Avatar billede agg-zeus Nybegynder
02. august 2002 - 12:10 #10
nej.. den laver også
1
2
2
3
Avatar billede steen Nybegynder
02. august 2002 - 12:12 #11
Jammen hvor mange records har du i databasen... prøv at lave en response.write(intCount)
Avatar billede agg-zeus Nybegynder
02. august 2002 - 12:12 #12
der er intet fast mønster... den lavede lige

1
1
1
3
Avatar billede agg-zeus Nybegynder
02. august 2002 - 12:13 #13
jeg har 7 records...
Avatar billede coltau Juniormester
02. august 2002 - 12:19 #14
STOP - STOP Du kan ikke anvende RS.MoveFirst på det recordset, som du har åbnet - det skal åbnes på følgende måde + resten af koden:

<%

sub VisInfo
  ' Her putter du reponse.write sætningerne
end sub

set RS = Server.CreateObject("ADODB.Recordset")
RS.CursorLocation = 3 ' adUseClient
RS.CursorType = 3 ' adOpenStatic
RS.Open "select * from tabel;", Conn, , , &H0001 ' adCmdText

if not RS.EOF then
  randomize
  P1 = int(RS.RecordCount * rnd)
  RS.Move(P1)
  VisInfo
  ' Næste
  RS.MoveFirst
  do
    P2 = int(RS.RecordCount * rnd)
  loop until (P1 <> P2)
  RS.Move(P2)
  VisInfo
  ' Næste
  RS.MoveFirst
  do
    P3 = int(RS.RecordCount * rnd)
  loop until (P3 <> P2) and (P3 <> P1)
  RS.Move(P3)
  VisInfo
  ' Næste
  RS.MoveFirst
  do
    P4 = int(RS.RecordCount * rnd)
  loop until (P4 <> P3) and (P4 <> P2) and (P4 <> P1)
  RS.Move(P4)
  VisInfo
end if

%>

Det ser lidt firkantet ud - men det virker.
Avatar billede agg-zeus Nybegynder
02. august 2002 - 12:33 #15
jeg får fejlen: Rækkesættet understøtter ikke baglæns hentning.
Avatar billede agg-zeus Nybegynder
02. august 2002 - 12:35 #16
det var bare mig der failede.. :o)

Det virker.. takker coltau
Avatar billede coltau Juniormester
02. august 2002 - 12:37 #17
Så prøv denne:

rs.Open strSQL, Conn, 1, 3 ' adOpenKeyset, adLockOptimistic

I stedet for disse:

RS.CursorLocation = 3 ' adUseClient
RS.CursorType = 3 ' adOpenStatic
RS.Open "select * from tabel;", Conn, , , &H0001 ' adCmdText
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