Avatar billede bobbedude Nybegynder
15. januar 2003 - 15:16 Der er 12 kommentarer og
1 løsning

Randomize record set Part II

Jeg lavede en fejl da jeg skulle avise et svar.

http://www.eksperten.dk/spm/305448

Spørgsmålet er stadig ikke løst.

Håber det er ok jeg gør sådan.


Min kode:

<%
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("database/tilbud.mdb")
SQL = "SELECT * FROM tilbudVare where priotet='A'"
set rs = Connect.execute(SQL)

top3 = 1
while not rs.eof and top3 < 4
%>
<table width="295" border="0" cellspacing="0" cellpadding="0" height="146" background="images/tilbud-kasse<%=top3%>.gif">
                      <tr>
                        <td align="right" valign="top">
                          <table width="100%" border="0" cellspacing="0" cellpadding="0" height="22">
                            <tr>
                              <td width="95">&nbsp;</td>
                              <td>
                                <div align="center" class="boldfont"><%=rs("varenavn")%></div>
                              </td>
                            </tr>
                          </table>
                          <table width="100%" border="0" cellspacing="0" cellpadding="0" height="124">
                            <tr>
                              <td width="20">&nbsp;</td>
                              <td width="95">
                                <div align="center" class="tilbud"> <%=rs("tilbudpris")%>.-</div>
                              </td>
                              <td width="10">&nbsp;</td>
                              <td width="145">
                                <div align="center">
                                  <table width="95" cellspacing="0" cellpadding="0" height="95">
                                    <tr>
                                      <td><img src="tilbudbilleder/<%=rs("billede")%>" width="95" height="95" border="1"></td>
                                    </tr>
                                  </table>
                                </div>
                              </td>
                              <td>&nbsp;</td>
                            </tr>
                          </table>
                        </td>
                      </tr>
</table>
                    <table width="100%" border="0" cellspacing="0" cellpadding="0" height="15">
                      <tr>
                        <td></td>
                      </tr>
                    </table>
<%
top3 = top3 +1
rs.movenext
wend
%>


HVORDAN KAN JEG LAVE SÅ DEN TRÆKKER DATA UD RANDOM ?
ALTSÅ 3 RANDOM BILLEDER HVERGANG FILEN KØRERES.
Avatar billede arnvig Nybegynder
15. januar 2003 - 15:41 #1
OBS:

**  Løsningen må ikke indeholde noget der ændrer i scriptet **
Avatar billede bobbedude Nybegynder
15. januar 2003 - 15:54 #2
Ja ups sorry det glemte jeg.
Avatar billede eagleeye Praktikant
15. januar 2003 - 15:54 #3
Jeg har brugt dette til at finde X antal random records fra en database som er forskellige fra hinanden:



strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("abb.mdb")
Set Conn = Server.CreateObject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.RecordSet")
Conn.Open strDSN

antalRandom = 3
Rs.Open "select * from produkter", Conn,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
     
    'UDSKRIV FRA DATABASEN HER
    Response.write  rs("ID") & "<br>"

  next
end if
Rs.Close
Avatar billede eagleeye Praktikant
15. januar 2003 - 15:55 #4
Eller denne SQL sætning kan vist også bruges:

SQL = "SELECT TOP 3 * FROM Tabel ORDER BY Rnd(ID)"
Avatar billede eagleeye Praktikant
15. januar 2003 - 15:56 #5
Kommentar (15/01-2003 15:55:39) er i stedet for mit føste svar.
Avatar billede eagleeye Praktikant
15. januar 2003 - 15:57 #6
Så prøv at rette:

SQL = "SELECT * FROM tilbudVare where priotet='A'"
set rs = Connect.execute(SQL)

top3 = 1
while not rs.eof and top3 < 4



Til dette:
randomize
SQL = "SELECT TOP 3 * FROM tilbudVare where priotet='A' ORDER BY Rnd(ID)"
set rs = Connect.execute(SQL)

while not rs.eof
Avatar billede arnvig Nybegynder
15. januar 2003 - 17:28 #7
Select TOP 3 ...

Mod hvilken database ?
Det er vist ikke standard SQL ?
Avatar billede jaze Nybegynder
15. januar 2003 - 17:35 #8
SELECT TOP ?? er standard SQL og det virker i Access
Avatar billede eagleeye Praktikant
15. januar 2003 - 18:57 #9
arving>> Nej der er ikke meget som standart SQL. Hvis du ser efter så bruges der en Access database i dette spørgsmål og i Access bruger man TOP. Som vist nok også virker i MSSQL. I mySQL ville det være LIMIT.
Avatar billede bobbedude Nybegynder
16. januar 2003 - 07:26 #10
Microsoft OLE DB Provider for ODBC Drivers error '80040e10'

[Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1.

tilbud.asp, line 5

<%
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("database/bygma.mdb")
SQL = "SELECT TOP 3 * FROM tilbudVare where priotet='A' ORDER BY Rnd(ID)"
set rs = Connect.execute(SQL)

while not rs.eof
%>
<table width="295" border="0" cellspacing="0" cellpadding="0" height="146" background="images/tilbud-kasse<%=top3%>.gif">
                      <tr>
                        <td align="right" valign="top">
                          <table width="100%" border="0" cellspacing="0" cellpadding="0" height="22">
                            <tr>
                              <td width="95">&nbsp;</td>
                              <td>
                                <div align="center" class="boldfont"><%=rs("varenavn")%></div>
                              </td>
                            </tr>
                          </table>
                          <table width="100%" border="0" cellspacing="0" cellpadding="0" height="124">
                            <tr>
                              <td width="20">&nbsp;</td>
                              <td width="95">
                                <div align="center" class="tilbud"> <%=rs("tilbudpris")%>.-</div>
                              </td>
                              <td width="10">&nbsp;</td>
                              <td width="145">
                                <div align="center">
                                  <table width="95" cellspacing="0" cellpadding="0" height="95">
                                    <tr>
                                      <td><img src="tilbudbilleder/<%=rs("billede")%>" width="95" height="95" border="1"></td>
                                    </tr>
                                  </table>
                                </div>
                              </td>
                              <td>&nbsp;</td>
                            </tr>
                          </table>
                        </td>
                      </tr>
</table>
                    <table width="100%" border="0" cellspacing="0" cellpadding="0" height="15">
                      <tr>
                        <td></td>
                      </tr>
                    </table>
<%
top3 = top3 +1
rs.movenext
wend
%>
Avatar billede bobbedude Nybegynder
16. januar 2003 - 10:18 #11
Oki så virker det


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



sub VisInfo
%>
<table width="295" border="0" cellspacing="0" cellpadding="0" height="146" background="images/tilbud-kasse<%=color%>.gif">
<tr>
<td align="right" valign="top">
<table width="100%" border="0" cellspacing="0" cellpadding="0" height="22">
<tr>
<td width="95">&nbsp;</td>
<td>
<div align="center" class="boldfont"><%=rs("varenavn")%></div>
</td>
</tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="0" height="124">
<tr>
<td width="20">&nbsp;</td>
<td width="95">
<div align="center" class="tilbud"> <%=rs("tilbudpris")%>.-</div>
</td>
<td width="10">&nbsp;</td>
<td width="145">
<div align="center">
<table width="95" cellspacing="0" cellpadding="0" height="95">
<tr>
<td><img src="tilbudbilleder<%=rs("billede")%>" width="95" height="95" border="1"></td>
</tr>
</table>
</div>
</td>
<td>&nbsp;</td>
</tr>
</table>
</td>
</tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="0" height="15">
<tr>
<td></td>
</tr>
</table>
<%
end sub

set rs = Server.CreateObject("ADODB.Recordset")
rs.CursorLocation = 3 ' adUseClient
rs.CursorType = 3 ' adOpenStatic
rs.Open "SELECT * FROM tilbudVare where priotet='A';", Connect, , , &H0001 ' adCmdText

if not rs.EOF then
  randomize
  P1 = int(rs.RecordCount * rnd)
  rs.Move(P1)
  color=1
  VisInfo
 
  ' Næste
  rs.MoveFirst
  do
    P2 = int(rs.RecordCount * rnd)
  loop until (P1 <> P2)
  rs.Move(P2)
  color=2
  VisInfo
  ' Næste
  rs.MoveFirst
  do
    P3 = int(rs.RecordCount * rnd)
  loop until (P3 <> P2) and (P3 <> P1)
  rs.Move(P3)
color=3
  VisInfo
  ' Næste
  'rs.MoveFirst
  'do
  '  P4 = int(rs.RecordCount * rnd)
  'loop until (P4 <> P3) and (P4 <> P2) and (P4 <> P1)
' rs.Move(P4)
' VisInfo
end if

%>
Avatar billede bobbedude Nybegynder
16. januar 2003 - 10:19 #12
luk
Avatar billede arnvig Nybegynder
16. januar 2003 - 12:45 #13
TOP er ikke standard SQL.
Findes SVJV ikke i Oracle.
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