Avatar billede mcp_dk Nybegynder
02. december 2004 - 10:55 Der er 11 kommentarer og
1 løsning

trække tilfældig data ud af DB der opfylder krav

Hej Eksperter

HAr kørt en online konkurrence hvor folk har svaret A, B eller C i en konkurrence og skrevet deres navn og adresse. Alt dette er nu fyldt i en access database og jeg skal nu trække nogle vindere. Jeg har ikke selv en stand forskid på ASP koden og konkurrencen blev lavet eksternt da jeg var i tidsnød.

Er der nogen der kan hjælpe mig med et script som kigger i databasen "competition" og vælger 1 tilfældig post ud som opfylder kravet om at svarfeltet "7svar" har værdien "C" eller "c" (ved ikke om et script er case-sensitive)
Avatar billede fennec Nybegynder
02. december 2004 - 11:02 #1
Dette burde virke. Det kræver bare at der er et autonummerfelt på tabellen, og det hedder ID.

<%
randomize
R=clng(1000000*rnd)
strSQL = "SELECT TOP 1 * FROM competition where 7svar='c' or 7svar='C' ORDER BY rnd(-(ID)*" & R & ")"
Set rs = objConn.Execute(strSQL)
if not rs.eof
  response.write rs("name")
end if
%>
Avatar billede fennec Nybegynder
02. december 2004 - 11:33 #2
Denne burde også gøre det:

strSQL = "SELECT * FROM competition where 7svar='c' or 7svar='C'"
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open strSQL , Conn,1, 2
randomize
R = clng(rs.RecordCount*rnd)+1
counter = 0
do while not rs.eof and counter < R
  rs.MoveNext
loop
if not rs.eof then
  response.write rs("name")
end if
Avatar billede mcp_dk Nybegynder
06. december 2004 - 14:11 #3
hmm kan ikke rigtig få det til at virke men er som sagt også et fæ til ASP. jeg antager at der skal stå noget mere i asp filen (åbne database etc.)

når jeg prøver det første eksempel rent indsat i filen winner.asp (jeg har et unikt ID felt det hedder bare unique_id istedet) som ser sådan her ud

<%
randomize
R=clng(1000000*rnd)
strSQL = "SELECT TOP 1 * FROM competition where 7svar='c' or 7svar='C' ORDER BY rnd(-(unique_id)*" & R & ")"
Set rs = objConn.Execute(strSQL)
if not rs.eof
  response.write rs("name")
end if
%>


får jeg denne fejl

Microsoft VBScript compilation error '800a03f9'

Expected 'Then'

/everquest2/winner.asp, line 6

if not rs.eof
-------------^
Avatar billede mcp_dk Nybegynder
06. december 2004 - 14:13 #4
når jeg prøver det andet eksempel

<%
strSQL = "SELECT * FROM competition where 7svar='c' or 7svar='C'"
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open strSQL , Conn,1, 2
randomize
R = clng(rs.RecordCount*rnd)+1
counter = 0
do while not rs.eof and counter < R
  rs.MoveNext
loop
if not rs.eof then
  response.write rs("name")
end if
%>

får jeg denne fejl:

ADODB.Recordset error '800a0bb9'

Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another.

/everquest2/winner.asp, line 4
Avatar billede mcp_dk Nybegynder
06. december 2004 - 14:21 #5
skal måske lige tilføje at jeg kun kan anvende classic ASP og ikke ASP.net
Avatar billede fennec Nybegynder
07. december 2004 - 14:18 #6
Det er mig der har glem nogle ting. Sådan er det når man ikke tester løsningerne først:

Der mangler et "then" i første løsning:
if not rs.eof then  '<-- et "then" her

I anden løsning manglede der en optællning:
do while not rs.eof and counter < R
  counter = counter + 1  '<-- Denne manglede
  rs.MoveNext
loop
Avatar billede mcp_dk Nybegynder
07. december 2004 - 15:58 #7
script:
-----
<%
strSQL = "SELECT * FROM competition where 7svar='c' or 7svar='C'"
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open strSQL , Conn,1, 2
randomize
R = clng(rs.RecordCount*rnd)+1
counter = 0
do while not rs.eof and counter < R
  counter = counter + 1
  rs.MoveNext
loop
if not rs.eof then
  response.write rs("name")
end if
%>
-----
Fejl:
-----
ADODB.Recordset error '800a0bb9'

Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another.

/everquest2/winner.asp, line 4
-----
Avatar billede mcp_dk Nybegynder
07. december 2004 - 15:59 #8
Script:
-----
<%
randomize
R=clng(1000000*rnd)
strSQL = "SELECT TOP 1 * FROM competition where 7svar='c' or 7svar='C' ORDER BY rnd(-(unique_id)*" & R & ")"
Set rs = objConn.Execute(strSQL)
if not rs.eof then
  response.write rs("name")
end if
%>
-----
fejl:
-----
Microsoft VBScript runtime error '800a01a8'

Object required: 'objConn'

/everquest2/winner1.asp, line 5
-----
Avatar billede mcp_dk Nybegynder
07. december 2004 - 16:11 #9
kan godt være jeg overser noget vold-simpelt men har som sagt ikke styr på ASP kodning. :-(
Avatar billede fennec Nybegynder
08. december 2004 - 08:25 #10
objConn er din database connection. Den skal gerne være noget i denne stil:

set objConn = Server.CreateObject("ADODB.Connection")
objConn.open "En tekst som definere databasetilslutning"

hvis du allerede har sådan en, men den hedder noget andet, ændre du bare "objConn" i scriptet til det din hedder. I det andet script har jeg kaldt conectionen "Conn".
Avatar billede mcp_dk Nybegynder
08. december 2004 - 10:44 #11
hmm umiddelbart vil jeg mene min database connection er denne her:
-----
accessdb="testinputdb"
cn="DRIVER={Microsoft Access Driver (*.mdb)};"
cn=cn & "DBQ=" & server.mappath(accessdb)
Set rs = Server.CreateObject("ADODB.Recordset")
-----
når jeg sætter det ind får jeg stadig fejlen men selvfølglig bare i linie 10 ;-)

Det er jo klart for jeg har ikke defineret nogen objConn
Avatar billede mcp_dk Nybegynder
10. december 2004 - 13:24 #12
Da der ikke ser ud til at komme et endegyldigt svar lukker jeg spørgsmålet. Beklager hvis jeg har brugt din tid unødigt fennec.
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