Avatar billede annettef Nybegynder
01. september 2004 - 12:41 Der er 16 kommentarer og
1 løsning

Random udtræk af 2 foto (poster) fra access database

Hej!

Jeg har lavet en asp side hvor jeg henter poster ud fra tre forskellige tabeller.

Nu er mit problem... Jeg har en række tilbud (kolonnenavn = fotoTilbud)i en tabel (tabelnavn = vare) som jeg kun ønsker at vise to af ad gangen på den pågældende asp side. De to tilbud som vises, skal udvælges tilfældigt fra tabellen. Hvordan gør jeg det???

Jeg har forsøgt mig med mange af de randomløsninger som findes her på siden, men jeg kan ikke få nogle af dem til at virke...

Altså for at gøre en lang forklaring kort - hvordan viser jeg to tilfældige tilbud fra en database??

Her er min kode:
-----------

<%
Option Explicit
Dim Conn, DSN, sltid, strSQL, rs1, rs2, rs3, KatID, intKatId, column
Response.Buffer=True
%>
<%
intKatId = Request.QueryString("intKatId")
%>
<!--#include file="dbconn.inc"--><!-- Database forbindelse oprettes via ekstern fil-->
<html>

<head>
<title>Internet</title>
<Link Rel="stylesheet" href="datronic.css" Type="text/css" > <!-- link til ekstern style sheet -->

<style type="text/css">
<!--
.style1 {color: #FFFFFF}
body {
    margin-top: 0px;
    margin-left: 4px;
}
-->
</style>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"></head>

<body>
  <br>
<%' SQL forespørgsel
KatID = Request.Querystring("intKatId")
strSQL = "Select kategoriNavn From kategori Where kategoriId =" & KatID

' Udfør strSQL (rs1 kommer til at indeholde dataen)
Set rs1 = Conn.Execute(strSQL)

' SQl forespørgsel - rs2 kommer til at indeholde det udvalgte data
strSQL = "Select * From tekst Where kategoriId =" & KatID
Set rs2 = Conn.Execute(strSQL)

' SQl forespørgsel - rs3 kommer til at indeholde det udvalgte data
strSQL = "Select fotoTilbud From vare"
Set rs3 = Conn.Execute(strSQL)

%>
<table width="490" height="445" border="0" align="left"><!--hovedtabel start-->
  <tr>
    <td align="left"  height="18" valign="center" bgcolor="#545DB9"><span class="style1"><%response.write rs1("kategoriNavn")%></span></td>
  </tr>
<!--</table>-->
<tr>
<td align="center" valign="top">
      <%


Response.Write "<table border=0 cellspacing=0 cellpadding=0 width='485' align=left>" 'Indholdstabel start
Do While Not rs2.EOF
Response.Write "<tr><td>"
Response.Write "<p>" & rs2("overskrift") & "</p>"
Response.Write "</td></tr>"
Response.Write "<tr><td>"
Response.Write rs2("indhold")
Response.Write "<br><br></td></tr>"
' Gå til næste record i rs
    rs2.MoveNext

    ' Gå i loop indtil rs ikke indeholder flere records (= EOF)
    Loop
    ' Afslutter den oprettede tabel
    Response.Write "</table><br>"

%>
</td></tr>
<tr><td valign="bottom">
--------
Det er her mine to tilbud skal udskrives - lige nu udskrives kun et foto
--------
<%
'det er her de to tilbud skal udskrives
Response.Write "<table border=0 cellspacing=0 cellpadding=5 width='485' align=center>" 'Indholdstabel start
        Response.Write "<td width='240' align='left' valign='top'>"
        Response.Write "<img src=""" & rs3("foto") & """ border='0'>"
        Response.Write"</td></tr>"
' Afslutter den oprettede tabel
    Response.Write "</table><br>"


' Luk forbindelse fra dbconn.inc
Conn.Close
Set Conn = Nothing
%>
    </td>
  </tr>
</table>
<!--Hovedtabel slut-->

</body>
</html>
------------

Håber der er nogen der kan hjælpe :o)

/Annette
Avatar billede fennec Nybegynder
01. september 2004 - 12:51 #1
På denne måde burde du få to tilfældige fra databasen:

<%
randomize
R=clng(100000*rnd)
SQL = "SELECT top 2 * FROM DinTabel ORDER BY rnd(-(ID)*" & R & ")"
%>
Avatar billede annettef Nybegynder
01. september 2004 - 13:21 #2
Fennec
Jeg er slet ikke med - hvor skal jeg sætte det ind i min kode for at det virker????

/Annette
Avatar billede fennec Nybegynder
01. september 2004 - 13:37 #3
Da jeg ikke var sikker på hvilke tabeller/kolonner jeg skulle i for at trække tilbud ud, lavede jeg det på den måde, for at du så måske selv kunne få det tilpasset.

Det du skal gøre er at lave en SQL-sætning som trækker alle tilbud ud. Er det denne:
strSQL = "Select fotoTilbud From vare"

Hvis ikke, kan du så ikke lige smide en sætning ind som gør...
Avatar billede annettef Nybegynder
01. september 2004 - 13:45 #4
Jo, det er den sætning som trækker alle mine tilbud ud.

Nu har jeg bare lige fundet ud af jeg har et andet problem også. Ved de varer hvor der ikke er noget tilbud (og dermed ikke noget foto) kommer der jo bare et rødt kryds - kan man på en eller anden måde få random-funktionen til at springe dem over???

/Annette
Avatar billede fennec Nybegynder
01. september 2004 - 14:08 #5
randomize
R=clng(100000*rnd)
strSQL = "Select top 2 fotoTilbud From vare ORDER BY rnd(-(ID)*" & R & ")"
Set rs3 = Conn.Execute(strSQL)
'Så er der valgt to tilfældige fotoTilbud fra vare.

do while not rs3.eof
  response.write fotoTilbud
  rs3.MoveNext
loop

Du kan bare fjerne de tilbud hvor fotoTilbud er tom fra dem den skal vælge:

strSQL = "Select top 2 fotoTilbud From vare where fotoTilbud <> '' ORDER BY rnd(-(ID)*" & R & ")"
Avatar billede annettef Nybegynder
01. september 2004 - 14:23 #6
Nu har jeg sat dit forslag ind i min kode, men får denne fejl:

Microsoft OLE DB Provider for ODBC Drivers error '80040e10'

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

/datronic/frameset/forside_udsk.asp, line 80

Min kode ser således ud:
-------------


<%
Option Explicit
Dim Conn, DSN, sltid, strSQL, rs1, rs2, rs3, KatID, intKatId, column, R
Response.Buffer=True
%>
<%
intKatId = Request.QueryString("intKatId")
%>
<!--#include file="dbconn.inc"--><!-- Database forbindelse oprettes via ekstern fil-->
<html>

<head>
<title>Internet</title>
<Link Rel="stylesheet" href="datronic.css" Type="text/css" > <!-- link til ekstern style sheet -->

<style type="text/css">
<!--
.style1 {color: #FFFFFF}
body {
    margin-top: 0px;
    margin-left: 4px;
}
-->
</style>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"></head>

<body>
  <br>
<%' SQL forespørgsel
KatID = Request.Querystring("intKatId")
strSQL = "Select kategoriNavn From kategori Where kategoriId =" & KatID

' Udfør strSQL (rs1 kommer til at indeholde dataen)
Set rs1 = Conn.Execute(strSQL)

' SQl forespørgsel - rs2 kommer til at indeholde det udvalgte data
strSQL = "Select * From tekst Where kategoriId =" & KatID
Set rs2 = Conn.Execute(strSQL)

' SQl forespørgsel - rs3 kommer til at indeholde det udvalgte data
'strSQL = "Select * From foto Where kategoriId =" & KatID
'Set rs3 = Conn.Execute(strSQL)

%>
<table width="490" height="445" border="0" align="left"><!--hovedtabel start-->
  <tr>
    <td align="left"  height="18" valign="center" bgcolor="#545DB9"><span class="style1"><%response.write rs1("kategoriNavn")%></span></td>
  </tr>
<!--</table>-->
<tr>
<td align="center" valign="top">
      <%


Response.Write "<table border=0 cellspacing=0 cellpadding=0 width='485' align=left>" 'Indholdstabel start
Do While Not rs2.EOF
Response.Write "<tr><td>"
Response.Write "<p>" & rs2("overskrift") & "</p>"
Response.Write "</td></tr>"
Response.Write "<tr><td>"
Response.Write rs2("indhold")
Response.Write "<br><br></td></tr>"
' Gå til næste record i rs
    rs2.MoveNext

    ' Gå i loop indtil rs ikke indeholder flere records (= EOF)
    Loop
    ' Afslutter den oprettede tabel
    Response.Write "</table><br>"

%>
</td></tr>
<tr><td valign="bottom">

<%
randomize
R=clng(100000*rnd)
strSQL = "Select top 2 fotoTilbud From vare where fotoTilbud <> '' ORDER BY rnd(-(ID)*" & R & ")"
Set rs3 = Conn.Execute(strSQL)
'Så er der valgt to tilfældige fotoTilbud fra vare.

do while not rs3.eof
  response.write fotoTilbud
  rs3.MoveNext
loop


' Luk forbindelse fra dbconn.inc
Conn.Close
Set Conn = Nothing
%>
    </td>
  </tr>
</table>
<!--Hovedtabel slut-->

</body>
</html>

/Annette
Avatar billede fennec Nybegynder
01. september 2004 - 14:31 #7
Min fejl.
response.write fotoTilbud

skal selvfølgelig være:
response.write rs3("fotoTilbud")
Avatar billede annettef Nybegynder
01. september 2004 - 14:40 #8
Jeg får stadig den samme fejl, selvom jeg har rettet det til
response.write rs3("fotoTilbud")
Avatar billede fennec Nybegynder
01. september 2004 - 14:42 #9
hvilken linje er nr. 80 ??
Avatar billede annettef Nybegynder
01. september 2004 - 14:45 #10
Det er denne linie

Set rs3 = Conn.Execute(strSQL)
Avatar billede fennec Nybegynder
01. september 2004 - 14:53 #11
prøv lige at smide:
response.write "SQL-sætning: "& strSQL

...ind i linjen før, så SQL-sætningen bliver udskrevet på skærmen, og smide resultatet herind.
Avatar billede annettef Nybegynder
01. september 2004 - 14:58 #12
Så får jeg dette frem:

SQL-sætning: Select top 2 fotoTilbud From vare where fotoTilbud <> '' ORDER BY rnd(-(ID)*15944)
Microsoft OLE DB Provider for ODBC Drivers error '80040e10'

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

/datronic/frameset/forside_udsk.asp, line 81
Avatar billede fennec Nybegynder
01. september 2004 - 15:01 #13
Hvad hedder navnet på den kolonne som er primærnøgle (autonummer) i vare tabellen?
Avatar billede annettef Nybegynder
01. september 2004 - 15:02 #14
Den hedder: vareid (kun små bogstaver)
Avatar billede fennec Nybegynder
01. september 2004 - 15:04 #15
Så prøv denne:
strSQL = "Select top 2 fotoTilbud From vare where fotoTilbud <> '' ORDER BY rnd(-(vareid)*" & R & ")"
Avatar billede annettef Nybegynder
01. september 2004 - 15:18 #16
Super - nu virker det.

Tusind tak for hjælpen - smid et svar så du kan få point

/Annette
Avatar billede fennec Nybegynder
01. september 2004 - 15:19 #17
.o) <-- One Eyed Jack
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