Avatar billede webbe Nybegynder
21. maj 2002 - 14:19 Der er 6 kommentarer og
2 løsninger

Vælg en tilfældig post - vælg derefter en anden tilfældig

Hejsa

Jeg har et større problem med udvælgelsen af tilfældige poster.

Det foregår over 2 gange.

Første gang er der ikke nogen problemer, men anden gang hvor jeg vil vælge fra samme tabel men ikke samme post som første valgte får jeg en gang imellem følgende fejl:

ADODB.Field error '80020009'

Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record.

/scan_web/startside.asp, line 0


Første gang jeg vælger en tilfældig post gør jeg sådan her:

<%
                      strSQL1 = "SELECT COUNT(*) AS Antal FROM Film WHERE Spotlight='on' AND Godkendt='on'"
                      Set rs = Connect.Execute(strSQL1)
                     
                      spotSQL = "SELECT * FROM Film,Filmpopup WHERE ((Film.Godkendt='on') AND (Film.Spotlight='on') AND (Filmpopup.Edbnr=Film.Edbnr)) ORDER BY Filmpopup.Filmnr DESC"
                      Set spotRS = Connect.Execute(spotSQL)
                      %>
                        <table width="188" border="0" cellspacing="0" cellpadding="0" height="460">
                          <tr>
                            <td height="24" width="188"><img src="grafik/spotlights.jpg" height="21"><img src="grafik/pilehojre.jpg" width="13" height="21"></td>
                          </tr>
                          <tr>
                            <%
                            Randomize
                            RandNum1 = Int(Rnd*rs("Antal"))+1
                   
                            If not spotRS.bof Then
                                spotRS.movefirst
                                spotRS.Move RandNum1-1
                            %>   
                            <td align="left" valign="top" height="218" width="188" style="border-top:1px #6C717B solid;border-bottom:1px #6C717B solid;border-right:1px #6C717B solid;border-left:1px #6C717B solid;" bgcolor="9FA4AC">
                                <%
                                For i = 1 to 1
                                %>
                                <a href="moviespot.asp?edbnr=<%=spotRS("Edbnr")%>"><img src="images/film/<%=spotRS("Filmnr")%>/<%=spotRS("Spotpic")%>" width="180" height="208" vspace="7" hspace="7" border="0"></a>
                                <%
                                Next
                                %>
                            </td>
                            <%
                            End if
                            %>

Anden gang gør jeg sådan her:

<%
                      strSQL2 = "SELECT COUNT(*) AS Antal FROM Film WHERE Spotlight='on' AND Godkendt='on'"
                      Set rs1 = Connect.Execute(strSQL2)
                     
                      spotSQL1 = "SELECT * FROM Film,Filmpopup WHERE ((Film.Godkendt='on') AND (Film.Spotlight='on') AND (Filmpopup.Edbnr=Film.Edbnr) AND (Film.Edbnr <>"&spotRS("Edbnr")&")) ORDER BY Filmpopup.Filmnr DESC"
                      Set spotRS1 = Connect.Execute(spotSQL1)
                      %>
                        <table width="190" border="0" cellspacing="0" cellpadding="0" height="465">
                          <tr>
                            <td height="24"><img src="grafik/pilehojre.jpg" width="13" height="21"></td>
                          </tr>
                          <tr>
                            <%
                            Randomize
                            RandNum2 = Int(Rnd*rs1("Antal"))+1
                   
                            If not (spotRS1.bof or spotRS1.eof) Then
                                spotRS1.movefirst
                                spotRS1.Move RandNum2+1
                            %>   
                            <td align="left" valign="top" height="218" width="190" style="border-top:1px #6C717B solid;border-bottom:1px #6C717B solid;border-right:1px #6C717B solid;border-left:1px #6C717B solid;" bgcolor="9FA4AC">
                                <%
                                For i = 2 to 2
                                %>
                                <a href="moviespot.asp?edbnr=<%=spotRS1("Edbnr")%>"><img src="images/film/<%=spotRS1("Filmnr")%>/<%=spotRS1("Spotpic")%>" width="180" height="208" vspace="7" hspace="7" border="0"></a>
                                <%
                                Next
                                %>
                            </td>
                            <%
                            Else
                                spotRS1.movefirst
                                spotRS1.Move RandNum2-1
                            %>   
                            <td align="left" valign="top" height="218" width="190" style="border-top:1px #6C717B solid;border-bottom:1px #6C717B solid;border-right:1px #6C717B solid;border-left:1px #6C717B solid;" bgcolor="9FA4AC">
                                <%
                                For i = 2 to 2
                                %>
                                <a href="moviespot.asp?edbnr=<%=spotRS1("Edbnr")%>"><img src="images/film/<%=spotRS1("Filmnr")%>/<%=spotRS1("Spotpic")%>" width="180" height="208" vspace="7" hspace="7" border="0"></a>
                                <%
                                Next
                                %>
                            </td>
                            <%
                            End if
                            %>

Det går galt i min anden random-select.
Avatar billede tjacob Juniormester
21. maj 2002 - 14:40 #1
Hvad med denne linie:  spotRS1.Move RandNum2+1

Hvis nu RandNum2 er lig max(antal poster) -hvad den jo vil være en gang imellem, så vil du sætte recordsettet på en ikke eksisterende post med +1.
-eller hvad? jeg vil ikke påstå jeg kan gennemskue din kode 100%.

/tjacob
Avatar billede webbe Nybegynder
21. maj 2002 - 14:41 #2
Tjah - det er vel noget i den stil.

Kan man på anden måde lave en random select?
Avatar billede tjacob Juniormester
21. maj 2002 - 14:54 #3
Du kunne jo prøve at lave 2. select magen til første (altså udelade hele første del af If-sætningen, og bare vælge spotRS1.Move RandNum2-1.)
Når RandNum2 er valgt sammenligner du det med RandNum1 og hvis det er det samme kører du igen. Altså lave det i f.eks. et Do-loop.
Noget a la:

    Dim bSamme
    Randomize
    Do
        bSamme = False
        RandNum2 = Int(Rnd*rs1("Antal"))+1
        If RandNum2 = RandNum1 then bSamme = True
    Loop Until bSamme = False

/tjacob
Avatar billede webbe Nybegynder
21. maj 2002 - 15:05 #4
tjacob:

Nope - det virker ikke.
Avatar billede webbe Nybegynder
21. maj 2002 - 15:08 #5
Med det forslag er det den samme film der vises som 2. film
Avatar billede tjacob Juniormester
21. maj 2002 - 15:43 #6
Det må være fordi den aldrig flytter posten til RandNum2-1 ???
Men i øvrigt er det en unødvendig kompliceret konstruktion du har.
Du kunne nøjes med en forespørgsel :

Set rs = Connect.Execute(strSQL1) 'find Antal
og
Set spotRS = Connect.Execute(spotSQL1) 'find film

og så valgte to forskellige poster i denne ene forespørgsel:
    Dim bSamme
    Randomize
    Do
        bSamme = False
        RandNum1 = Int(Rnd*rs("Antal"))+1
        RandNum2 = Int(Rnd*rs("Antal"))+1
        If RandNum2 = RandNum1 then bSamme = True
    Loop Until bSamme = False

og herefter flyttede først til post 'RandNum1' og indsatte data i tabellen
og derefter til post 'randNum2' og indsatte data.
Avatar billede eagleeye Praktikant
26. maj 2002 - 00:23 #7
Jeg har dette styk kode:

'connection ligges her...

antalRandom = 2
Rs.Open "SELECT * FROM Film ", Connect,1,3
inDB = rs.RecordCount
If inDB > antalRandom then
  Randomize timer
  newId = Int (rnd*inDB)
  strIndex = "," & newid & ","
  indexFound = 1
  Do while indexFound < antalRandom
    Do
      Newid = Int (rnd*inDB)
    Loop while inStr(strIndex,"," & newid & ",") > 0
    strIndex = strIndex & newid & ","
    indexFound = indexFound + 1
  Loop
  strIndex = mid (strIndex,2,len(strIndex)-2)
  myArr=split(strIndex,",",-1)
  For i = Lbound(myArr) to Ubound(myArr)
    rs.move myArr(i),1
     
    'UDSKRIVE POST FRA RECORD HER:
    %>

    <a href="moviespot.asp?edbnr=<%=RS("Edbnr")%>"><img src="images/film/<%=Rs("Filmnr")%>/<%=RS("Spotpic")%>" width="180" height="208" vspace="7" hspace="7" border="0"></a><br>

<%
  next
end if
Rs.Close
Avatar billede webbe Nybegynder
27. maj 2002 - 14:07 #8
Lukker spørgsmålet og lader koden være som den er nu, idet det kun er sjældent den samme film vises begge steder.

I deler dog pointene for jeres indsats.

Gemmer dog jeres eksempler til senere brug.
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