Avatar billede kokholm Nybegynder
25. januar 2002 - 13:43 Der er 23 kommentarer og
1 løsning

200 point for et tricky randomscript bortgives

Hej...

Jeg behøver et randomscript som kan trække 2 tilfældige poster ud fra en Access-db og da det er lidt tricky er jeg klar til at smide en pæn omgang point oveni de lovede til den som klarer ærterne.

Der skal tages højde for at poster kan blive slettet undervejs, ligeom at der skal finde en frasortering sted.

Der vides ikke på forhånd hvor mange poster der er i db da der løbende tilføjes / slettes i den.

Db indeholder feltet "ID" som er primærnøgle.
Lad os antage vi har posterne med ID 1,2,3,4,5 i db. Så sker der det at post 2 bliver slettet fra db og ID 2 forsvinder derved ud af rækken.
Her skal scriptet så kunne håndtere denne situation uden at den vælger en ikke eksisterende post.

DB indeholder også et udløbsfelt "udloeb" (datofelt)
Poster hvor udløbsfeltet er overskredet i forhold til den aktuelle dags dato må ikke kunne vælges / vises.

Sluttelig skal jeg kunne placere / kalde det udtrukne felt i form at et "navn" på den side hvor de skal indsættes (f.eks. første udtrukne felt = "felt1" og andet udtrukne felt = "felt2")

Håber det var en nogenlunde brugelig forklaring på mit ønske / behov - ellers spørg - jeg er som sagt villig til at smide en del gode point oveni de lovede for dette script.

// Ole
Avatar billede sylvester1 Nybegynder
25. januar 2002 - 13:54 #1
Nu er jeg ikke helt sikker, men noget i stil med det her burde virke..

<%
set conn = server.CreateObject("ADODB.CONNECTION")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("\myDB.mdb")

set rs = "select * from myTable WHERE udloeb< #date()# "

upperlimit = rs.fields.count-1
lowerlimit = 0.0
rec = Int((upperlimit - lowerlimit + 1)*Rnd() + lowerlimit)
rs.move(rs.fields.count, rec)
Response.Write(rs("felt1"))
%>
Avatar billede Slettet bruger
25. januar 2002 - 14:15 #2
Avatar billede coltau Juniormester
25. januar 2002 - 14:32 #3
Jeg har en der kan netop det - jeg skal bare lige finde den frem. Øjeblik.
Avatar billede coltau Juniormester
25. januar 2002 - 14:39 #4
Avatar billede kokholm Nybegynder
25. januar 2002 - 16:02 #5
Sylvester1 > Jeg får en fejl i dit eksempel i linien: rs.move(rs.fields.count, rec)

Sylvester1 / Coltau > Er der en mulighed for noget tilpasset kode ? Jeg har bøvlet i lang tid med at få noget kode til at virke på ovenstående og vil virkelig gerne have det her op at køre. Som det vistnok også ses af min pointgivning ;-)
Håber i gider hjælpe mig...
Avatar billede cool_casper Nybegynder
25. januar 2002 - 17:58 #6
Avatar billede cool_casper Nybegynder
26. januar 2002 - 14:42 #7
Ingenting der virkede...??
Avatar billede kokholm Nybegynder
26. januar 2002 - 14:42 #8
Var der en mulighed for noget assistance til udformingen af scriptets endelige kode. Jeg kan se mit spørgsmål er forstået, men jeg kan bare ikke få det til at virke, - så vil i ikke nok....
Jeg vil altså meget gerne have det her lavet snart.
Avatar billede coltau Juniormester
27. januar 2002 - 09:47 #9
Ja man er jo somme tider nødt til at teste det man henviser til - selvom svarene er accepteret er det ikke sikert det virker alligevel.

Her en koden der virker:

<%
' http://www.eksperten.dk/spm/163553

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

randomize
P = int(RS.RecordCount * rnd)

RS.Move(P)
response.write(">" & RS("ID"))
%>

Du må selv angive det rigtige tabelnavn mv.
Avatar billede kokholm Nybegynder
27. januar 2002 - 23:43 #10
Hej coltau..
Jeg har nu siddet og leget lidt med koden du gav.
Det ser ud til den virker mht. til de slettede poster.
Jeg har nu tilføjet i select'en at den skal udelade de udløbne poster. Det virker også.
Men..
- Hvordan får jeg den til at tage 2 tilfældige poster - ligenu laver den 1 tilfældig post.
- Og hvad/hvordan kan/skal jeg kalde dem på siden. (De skal placeres ved siden af hinanden i en tabel.)
Avatar billede kokholm Nybegynder
28. januar 2002 - 12:29 #11
Coltau > Glemte at nævne koden skal undgå 2 ens udtrukne poster.
Avatar billede kokholm Nybegynder
29. januar 2002 - 11:18 #12
Coltau > Jeg håber da ikke du har glemt mig helt. Du har jo næsten løst mit problem / spørgsmål. Hvis du du kan fikse den resterende del af opgaven er pointene dine.
Avatar billede coltau Juniormester
31. januar 2002 - 14:59 #13
Sorry - jeg havde glemt det. :-*
Er du stadigvæk igang. ?
Avatar billede kokholm Nybegynder
31. januar 2002 - 15:15 #14
Coltau >  Yeps....dvs. jeg er ikke kommet videre siden dit så lovende forslag / udgangspunkt. Kan du fikse den sidste del er der udover point også et par virtuelle kram herfra ;O)
Avatar billede coltau Juniormester
31. januar 2002 - 15:18 #15
Kram er altid godt. Jeg checker lige for jeg ved det virker.
Kan jeg få navnene på de to frames. ?
Avatar billede coltau Juniormester
31. januar 2002 - 15:19 #16
Glem spørgsmålet. det køre rundt - jeg tager lige en kop kaffe.
Avatar billede coltau Juniormester
31. januar 2002 - 15:46 #17
Her var den. Efter din SQL-sætning skal linierne se således ud:

if not RS.EOF then
  randomize
  P = int(RS.RecordCount * rnd)
  RS.Move(P)
  strNavn1 = RS("navn")
  RS.MoveFirst
  P = int(RS.RecordCount * rnd)
  RS.Move(P)
  strNavn2 = RS("navn")
  response.write("1=" & strNavn1 & " 2=" & strNavn2)
end if

Herefter har du strNavn1 som den ene tilfældige og strNavn2 som den anden.
Skal du bruge flere felter skal de gemmes på samme måde som strNavn1 og 2.
Avatar billede kokholm Nybegynder
01. februar 2002 - 14:43 #18
" COLTAU RULES THE WORLD " - eller sådan noget i den stil ;)
COLTAU > Vidunderligt at du gider hjælpe.
Eneste minus er at den jo ikke tager højde for udtræk af ens poster.
Hvordan kan det undgås ?
Når du skriver at jeg skal gemme flere felter på samme måde vil det så eksempelvis sige:
strNavn1 = RS("navn")
strMærke1 = RS("Mærke")
strPris1 = RS("Pris")
Avatar billede coltau Juniormester
01. februar 2002 - 23:18 #19
Ja felterne trækkes ud på den måde - men undgå at anvende æ i variabelnavne. strMærke1 = RS("Mærke") skal være strMaerke1 = RS("Mærke")

Du får lige en ny - der ikke rammer den samme to gange:

if not RS.EOF then
  randomize
  P1 = int(RS.RecordCount * rnd)
  RS.Move(P1)
  strNavn1 = RS("navn")
  RS.MoveFirst
  do
    P2 = int(RS.RecordCount * rnd)
  loop until (P1 <> P2)
  RS.Move(P2)
  strNavn2 = RS("navn")
  response.write("1=" & strNavn1 & "<br> 2=" & strNavn2)
end if
Avatar billede kokholm Nybegynder
02. februar 2002 - 22:49 #20
Coltau > - Har indsat dit forslag til at undgå ens poster og kørt en række test på den. Situationen med 2 ens forekommer i midlertid stadig med mellemrum. Nogen forslag ?
Avatar billede coltau Juniormester
03. februar 2002 - 10:26 #21
Det lyder som en umulighed - må jeg se det lille stykke kode. ?
Avatar billede kokholm Nybegynder
03. februar 2002 - 13:50 #22
Coltau > Selvfølgelig... - Det er jo faktisk din kode ;-)


set RS = Server.CreateObject("ADODB.Recordset")
RS.CursorLocation = 3 ' adUseClient
RS.CursorType = 3 ' adOpenStatic
RS.Open "SELECT * FROM Nye WHERE ([Udløber dato] > #" & Date() & "# OR [Udløber dato] IS

NULL)", Conn, , , &H0001 ' adCmdText

if not RS.EOF then
  randomize
  P = int(RS.RecordCount * rnd)
  RS.Move(P)
  strType1 = RS("Type")
  strAar1 = RS("Årgang")
  strPris1 = RS("Pris")
  RS.MoveFirst
  do
  P2 = int(RS.RecordCount * rnd)
  loop until (P1 <> P2)
  RS.Move(P2)
  strType2 = RS("Type")
  strAar2 = RS("Årgang")
  strPris2 = RS("Pris")
end if
response.write(strType1 & " - " & strAar1 & " - " & strPris1) %>
<BR>
<BR>
<% response.write(strType2 & " - " & strAar2 & " - " & strPris2) %>
Avatar billede kokholm Nybegynder
03. februar 2002 - 13:51 #23
Bang tju - Sikken en torsk jeg er....
Jeg har jo ikke skrevet P1 men kun P i koden, derfor går det jo galt.
Avatar billede coltau Juniormester
04. februar 2002 - 20:24 #24
Det samme gjorde jeg under test. :-)
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