Avatar billede w13 Novice
24. december 2004 - 01:03 Der er 9 kommentarer og
1 løsning

Tilfældigt ID fra database

-Hej Eksperter...

-Jeg sidder lige nu og roder med en (temmelig klodset) ASP-kode, som automatisk skal vælge et "element" (enten spil/film) til "Dagens element"... Jeg har fået det hele til at virke (skulle jeg mene) bortset fra den funktion, som skulle vælge et tilfældigt element, hvis ingen andre var valgt den givne dag. Nogen, som kan hjælpe mig? I behøver kun at få den sidste del af koden: (indtil videre, i hvert fald!)
_____________________________________________

strSQL = "UPDATE elements SET dagens = date() WHERE id = *TILFÆDIGT ID FRA DATABASEN"
set rs = myConn.Execute(strSQL)
Avatar billede kalp Novice
24. december 2004 - 01:10 #1
er ikke helt med på din kode men en kode til at udtrække noget tilfældigt er denne

<%
  Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.MapPath("DINDATABASE")
  Set rs = Server.CreateObject("ADODB.RecordSet")
strSQL = "SELECT * FROM TABEL
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
%>
Avatar billede w13 Novice
24. december 2004 - 10:53 #2
Så når jeg vil opdatere feltet "Dagens" til at indeholde værdien af "date()" i en tilfældig post, skal jeg skrive....?
Avatar billede w13 Novice
24. december 2004 - 11:08 #3
Nej, jeg omformulerer lige mit spørgsmål: Hvordan skal min SQL-sætning så se ud? For jeg ville jo først have sat den til at vælge udfra et tilfældigt ID, hvilket jeg ikke længere kan, da der er "huller" i ID-rækken; f.eks. har de henholdsvis ID'erne 1, 2, 3, 5, 8, 9, 10... osv. Og så vil jeg kunne risikere, at ID'et ikke fandtes...
Avatar billede kalp Novice
24. december 2004 - 11:33 #4
grunden til at jeg bliver forvirret er fordi din kodestump siger update...
min kodestump vil udvælge et nyt id hver gang siden loades... måske er jeg ikke helt med på hvad du ønsker... hvad skal det bruges til i hvilken sammenhæng?
Avatar billede w13 Novice
24. december 2004 - 16:02 #5
Jeg hjælper en ven med en side, som indeholder online spil og film... Og der er blandt andet en celle i designet som viser "Dagens spil/film"... Men han gider ikke selv opdatere den hver dag - f.eks. kan det jo være, han er på ferie, og så kan han ikke opdatere det... Så udfor alle spil/film i db'en har jeg lavet et felt kaldet "dagens". Så - når en bruger besøger forsiden - tjekker min kode, om der eksisterer et spil/film i db'en, hvor "dagens" = date() (altså om denne dags dato findes i databasen) og hvis den GØR det, skal posten udskrives på siden. Hvis den IKKE findes nogle steder (altså hvis alle datoer er forældede) skal den vælge en ny, tilfældig post, som får ændret sin "Dagens" til at indeholde "date()"... Verstehst?
Avatar billede kalp Novice
25. december 2004 - 00:19 #6
nu forstår jeg hvad du vil have... tror dog stadig mere det er min kode du skal bruge, men ved faktisk ikke hvordan den skal rettes til med dato'en men det noget med en if sætning ind i koden!
Avatar billede natsprinter Nybegynder
26. december 2004 - 01:16 #7
Her er en meget simpel måde at gøre det på, men det virker :-)

<%
'angiv størrelse på array
dim id(50)
'vælg alle poster i databasen
set db=conn.execute("select * from spil order by gruppe")

' Udskriv alle id til et array
do while not db.eof
    nummer = nummer + 1
    id(nummer) = db("id")
    db.moveNext
loop

'find et tilfældigt tal mellem 1 og antallet af poster i databasen
randomize
tal = int(rnd*nummer)+1

'udskriv en tilfældig post ( her er id ikke et nummer men en streng )
set db=conn.execute("select * from spil where id = '"&id(tal)&"'")
response.write db("betegnelse")

           

%>
Avatar billede w13 Novice
31. december 2004 - 01:57 #8
Men den skal jo vælge mellem alle Id'er i db'en...

Dette er hele min kode: (Ved godt, at den er rodet bygget op...)
__________________________________________________________________

<%
Set myConn = Server.CreateObject("ADODB.Connection")
myConn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("db/database.mdb")

strSQL = "SELECT * FROM elements WHERE dagens = date()"
set rs = myConn.Execute(strSQL)

If Not (rs.BOF Or rs.EOF) Then
strSQL = "SELECT TOP 1 [id], [navn], [picture] FROM [elements] ORDER BY [dagens] DESC"

Set rs = myConn.Execute(strSQL)
If Not (rs.BOF Or rs.EOF) Then

    Do While Not rs.EOF
    Response.Write "<br><a class='black' href='element_profil.asp?id=" & rs("id") &"' title='Gå til &#34;" & rs("navn") &"&#34;'>"
    Response.Write "<img border='0' alt='Gå til element' src='" & rs("picture") &"' width='100' height='100'>"
    Response.Write "</a><br>&nbsp;"
    rs.MoveNext
    Loop
    Else
    ' Hvis der ikke er skrevet noget
    Response.Write "<b>Der er ikke angivet et spil/film for i dag!</b><br>"
End If

Else

randomize
R=clng(100000*rnd)
strSQL = "UPDATE elements SET dagens = date() WHERE id = rnd(-(ID)*" & R & ")"
set rs = myConn.Execute(strSQL)

strSQL = "SELECT TOP 1 [id], [navn], [picture] FROM [elements] ORDER BY [dagens] DESC"
Set rs = myConn.Execute(strSQL)
If Not (rs.BOF Or rs.EOF) Then

    Do While Not rs.EOF
    Response.Write "<br><a class='black' href='element_profil.asp?id=" & rs("id") &"' title='Gå til &#34;" & rs("navn") &"&#34;'>"
    Response.Write "<img border='0' alt='Gå til element' src='" & rs("picture") &"' width='100' height='100'>"
    Response.Write "</a><br>&nbsp;"
    rs.MoveNext
    Loop
    Else
    ' Hvis der ikke er skrevet noget
    Response.Write "<b>Der er ikke angivet et spil/film for i dag!</b><br>"
End If
End If

myConn.Close
Set Conn = Nothing
%>
Avatar billede w13 Novice
07. januar 2005 - 16:36 #9
Jeg har nu denne kode:
_______________________________

<%
Set myConn = Server.CreateObject("ADODB.Connection")
myConn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("db/database.mdb")

strSQL = "SELECT * FROM elements WHERE dagens = date()"
set rs = myConn.Execute(strSQL)

If (rs.BOF Or rs.EOF) Then

'angiv størrelse på array
dim id(50)

'vælg alle poster i databasen
set rs=myConn.execute("select * from elements order by id")

' Udskriv alle id til et array
do while not rs.bof or rs.eof
    nummer = nummer + 1
    id(nummer) = rs("id")
    rs.moveNext
loop

'find et tilfældigt tal mellem 1 og antallet af poster i databasen
randomize
tal = int(rnd*nummer)+1

Else

strSQL = "UPDATE elements SET dagens = date() WHERE id = '"&id(tal)&"'"
set rs = myConn.Execute(strSQL)

'udskriv en tilfældig post ( her er id ikke et nummer men en streng )
set rs=myConn.execute("select * from elements where id = '"&id(tal)&"'")

    Response.Write "<br><a class='black' href='element_profil.asp?id=" & rs("id") &"' title='Gå til &#34;" & rs

("navn") &"&#34;'>"
    Response.Write "<img border='0' alt='Gå til element' src='" & rs("picture") &"' width='100' height='100'>"
    Response.Write "</a><br>&nbsp;"

End If

myConn.Close
Set Conn = Nothing
%>
_______________________________

Men den siger:
Microsoft VBScript runtime error '800a0009'

Subscript out of range: 'nummer'

/includes/after01.htm, line 38
Avatar billede w13 Novice
07. januar 2005 - 16:37 #10
Det er for resten denne linje:
id(nummer) = rs("id")
...
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