Avatar billede a-torsten Nybegynder
02. oktober 2001 - 10:41 Der er 14 kommentarer og
1 løsning

Tilfældig post fra Acces

Hejsa..

Jeg har et problem.....

Hvordan henter jeg en tilfældig post ud af en acces databasen ??

den indeholder : ID  |  TEKST

ID er autonummering, så der kommer huller når der bliver slettet en post..

-Anders
Avatar billede zteiner Nybegynder
02. oktober 2001 - 10:45 #1
jeg kigger lige .....
Avatar billede eagleeye Praktikant
02. oktober 2001 - 10:45 #2
strSQL = \"SELECT * FROM TABEL_NAVN\"

rs.Open strSQL, Conn, 3, 1
rndMax = CInt(rs.RecordCount)

if rndMax > 0 then
  Randomize
  rndNumber = Int((RND * rndMax)) \'Find et random nummer
  rs.Move rndNumber \'Flyt til den første valgte record
  Response.Write rs(\"navn\") \'udskriver her
  end if
rs.Close
Avatar billede a-torsten Nybegynder
02. oktober 2001 - 10:49 #3
Jeg har først mulighed for at teste efter 16.00, men det ser lovende ud...

Jeg havde selv lavet noget som talte antal poster og så tog et tilfældigt tal inden for de poster.. så var der 10 poster have poster=10, hvilket gav mangge blanke hvis post 2,3,5,7,8 var slettet og istedet hed 12,13,15,17,18....

-Anders
Avatar billede a-torsten Nybegynder
02. oktober 2001 - 16:46 #4
Der var sku ikke rigtigt held i sprøjten ved den der...

-Anders
Avatar billede eagleeye Praktikant
02. oktober 2001 - 16:48 #5
på hvilken måde?
Avatar billede eagleeye Praktikant
02. oktober 2001 - 16:50 #6
Du skal i SQL sætningen sette TABEL_NAVN til navnet på din tabel.
Du skal også rette rs(\"navn\") til rs(\"TEKST\").
Avatar billede a-torsten Nybegynder
02. oktober 2001 - 16:54 #7
Den viser intet...
Avatar billede a-torsten Nybegynder
02. oktober 2001 - 16:58 #8
Bryg lige vidre på det her:
<%
    Set Con = Server.CreateObject(\"ADODB.Connection\")
    DBPath = \"DBQ=\" & server.mappath(\"../database/database.mdb\")
    Con.Open \"DRIVER={Microsoft Access Driver (*.mdb)}; \" & DBPath

        SQL = \"SELECT count(id) AS antal_vidste_du FROM vidste_du\"
        Set rs = Con.Execute(SQL)

            Randomize()
            strRandom = int(rnd*rs(\"antal_vidste_du\"))+1

                Sql2 = \"SELECT * FROM vidste_du WHERE id=\" &strRandom
                Set random=  Con.Execute(Sql2)
               
                if random.EOF then
                end if

                Do While Not random.EOF

                    Response.write \"Vidste du at : \"&  random(\"tekst\")

                random.MoveNext
                Loop
                Set random= nothing
            rs.MoveNext
            Set rs= nothing
    Con.Close
    Set Con = Nothing
%>
Avatar billede eagleeye Praktikant
02. oktober 2001 - 17:06 #9
Problemmet er at man ikke kan benytte ID i WHERE da du godt kan havde 10 record men ID er 12,13,14,15,16... for man har slettet nogle gamle records. Så man er nød til at åbne hele recordset\'et. Hvis man vil ungå at åbne hele recordset\'et kan man bruge min og max ID som parameter til rnd functionen, men hvis der er 2 ID 1 og 100 og man så søger på ID>rnd, så vil man 99 gange få nummer 100 og 1 gang 1.

Alternativt kan man lave en kolonne som indeholder et fortløbne nummer fra 1 det kræver dog at man vedligeholder den kolonne hver gang man sletter eller indsætter en ny record.
Avatar billede a-torsten Nybegynder
02. oktober 2001 - 17:12 #10
Har du et fungerende script..??
Avatar billede a-torsten Nybegynder
02. oktober 2001 - 17:12 #11
Lad os sige at databasen kun indeholder feltet TEKST
Avatar billede eagleeye Praktikant
02. oktober 2001 - 17:18 #12
Jeg ville lave dit script sådan her:

<%
Set Con = Server.CreateObject(\"ADODB.Connection\")
DBPath = \"DBQ=\" & server.mappath(\"../database/database.mdb\")
Con.Open \"DRIVER={Microsoft Access Driver (*.mdb)}; \" & DBPath

SQL = \"SELECT count(id) AS antal_vidste_du FROM vidste_du\"
random.Open SQL, Con, 3, 1

rndMax = CInt(random.RecordCount)

if rndMax > 0 then
  Randomize()
  strRandom = int(rnd*rndMax)
  random.Move strRandom \'Flyt til den første valgte record
  Response.write \"Vidste du at : \"& random(\"tekst\")
end if
random.Close
Con.Close
Set Con = Nothing
%>
Avatar billede a-torsten Nybegynder
02. oktober 2001 - 17:19 #13
Fejltype:
Der opstod en Microsoft VBScript-kørselsfejl (0x800A01A8)
Et objekt er obligatorisk: \'random\'
/pro/vidste_du/Default.asp, line 7
Avatar billede a-torsten Nybegynder
02. oktober 2001 - 17:20 #14
Og hvor vil du hen med den sql-sætning..??...
Avatar billede eagleeye Praktikant
02. oktober 2001 - 17:22 #15
ups for meget copy/paste:

<%
Set Con = Server.CreateObject(\"ADODB.Connection\")
Set random = Server.CreateObject(\"ADODB.RecordSet\")
DBPath = \"DBQ=\" & server.mappath(\"../database/database.mdb\")
Con.Open \"DRIVER={Microsoft Access Driver (*.mdb)}; \" & DBPath

SQL = \"SELECT * FROM vidste_du\"
random.Open SQL, Con, 3, 1

rndMax = CInt(random.RecordCount)

if rndMax > 0 then
  Randomize()
  strRandom = int(rnd*rndMax)
  random.Move strRandom \'Flyt til den første valgte record
  Response.write \"Vidste du at : \"& random(\"tekst\")
end if
random.Close
Con.Close
Set Con = Nothing
%>
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