01. september 2004 - 12:41Der 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 -->
<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)
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-->
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...
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???
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 & ")"
<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)
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-->
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.
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.