webForumDet fria alternativet

Visa poster från olika tabeller?

Databaser & SQL

7 svar · 285 visningar · startad av magnus_n

Medlem sedan maj 200317 inlägg
Frågan#1

charkprodukter.asp består av ram1 (chark.asp), en sida som listar produkterna från databasen och ram2 (produktsvar.asp) där information om produkten spaltas upp.

chark.asp:
[KOD]
<%Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "DBQ=" & Server.MapPath("admin/jm.mdb") & ";Driver={Microsoft Access Driver (*.mdb)};"

Set RecSet = Server.CreateObject("ADODB.Recordset")
Visa = "SELECT * FROM Produkt ORDER BY Namn"
RecSet.Open Visa, Connect, adOpenStatic, adLockOptimistic %>

<%Do Until RecSet.EOF %>

<a href="produktsvar.asp?id=<%=RecSet("ProduktID")%>" target="svar"><%=RecSet("Namn") %></a><br>

<% RecSet.MoveNext
Loop
RecSet.Close %>

Denna kod fungerar bra och produkterna listas från db:n.

produktsvar.asp:
[KOD]
<%Set Connect = Server.CreateObject("ADODB.Connection")Connect.Open "DBQ=" & Server.MapPath("admin/jm.mdb") & ";Driver={Microsoft Access Driver (*.mdb)};"

Set RecSet = Server.CreateObject("ADODB.Recordset")
strSQL = "SELECT Namn, Bild, Kottmangd FROM Produkt, Kottmangd WHERE ProduktID = " & Request.Querystring("id")

Set RecSet = Connect.Execute (strSQL)%>

<ul>
<li><b><% =RecSet("Namn") %></b><br>
<br>
<img src="<% =RecSet("Bild") %>"<br>
<br>
<b>Köttmängd: </b><% =RecSet("Kottmangd") %>

Namn och bild som hämtas från produkt-tabellen visas rätt när man klickar på produkt-länken i ram1 (chark.asp) men köttmängden som hämtas från tabellen Kottmangd blir densamma för alla produkter även om de har olika värden i db:n. Någon som kan svara på varför det blir så?

Medlem sedan juni 200032 967 inlägg
#2

Du måste applicera where-villkoret på alla tabeller som ingår i frågan, annars vet du aldrig vilken data du får.

Medlem sedan maj 200317 inlägg
#3

Om jag tolkar det rätt borde koden isf se ut så här:

[ Set RecSet = Server.CreateObject("ADODB.Recordset")
strSQL = "SELECT Namn FROM Produkt WHERE ProduktID = " & Request.Querystring("id")
strSQL = "SELECT Bild FROM Produkt WHERE ProduktID = " & Request.Querystring("id")
strSQL = "SELECT Info FROM Svensk_ravara WHERE ProduktID = " & Request.Querystring("id")
strSQL = "SELECT Kottmangd FROM Kottmangd WHERE ProduktID = " & Request.Querystring("id")
strSQL = "SELECT Fetthalt FROM Fetthalt WHERE ProduktID = " & Request.Querystring("id")
strSQL = "SELECT Forvaring FROM Kylvara WHERE ProduktID = " & Request.Querystring("id")
strSQL = "SELECT Anvandningsomrade FROM Anvandningsomrade WHERE ProduktID = " & Request.Querystring("id")
strSQL = "SELECT Telefon FROM Konsumentkontakt WHERE ProduktID = " & Request.Querystring("id")
strSQL = "SELECT Ovrigt FROM Ovrigt WHERE ProduktID = " & Request.Querystring("id")

Set RecSet = Connect.Execute (strSQL)%\>\]

Får då följande:
Feltyp:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E10)
[Microsoft][Drivrutin för ODBC Microsoft Access] För få parametrar angavs. 1 förväntades.
/magnus/produktsvar.asp, line 39

Rad 39: Set RecSet = Connect.Execute (strSQL)%>

???

Medlem sedan juni 200032 967 inlägg
#4

Nej, du behöver bara göra förändring i WHERE-satsen.

strSQL = "SELECT Namn, Bild, Kottmangd FROM Produkt, Kottmangd WHERE Produkt.ProduktID = Kottmangd.ProduktID AND Produkt.ProduktID = " & Request.Querystring("id")

Men, jag vill ändå rekommendera dig att lägga all denna produktdata i en och samma tabell. Eller finns det kanske någon anledning som jag inte ser att alla attribut ligger i en egen tabell?

Mvh,

Medlem sedan maj 200317 inlägg
#5

Jag använder olika tabeller för att undvika redundans, men jag är kanske fel ute!? Provade att lägga in sql-satsen men får följande:

Feltyp:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E10)
[Microsoft][Drivrutin för ODBC Microsoft Access] För få parametrar angavs. 1 förväntades.
/magnus/produktsvar2.asp, line 33

Rad 33: <% Set RecSet = Connect.Execute (strSQL) %>

???

Medlem sedan juni 200032 967 inlägg
#6

Jag kan inte förstå hur det kan bli redundant om du lägger all relaterad produktdata i en och samma tabell.

Felmeddelandet betyder att det är något felaktigt tabell- eller fältnamn. Heter nyckeln ProduktID i båda tabellerna? Prova annars ange tabellnamn före fältnamn, dvs Produkt.Namn, Produkt.Bild, Kottmangd.Kottmangd.

Mvh,

Medlem sedan maj 200317 inlägg
#7

Problemet löst!

Den korrekta sql-satsen ska i mitt fall vara:

strSQL = "SELECT Namn, Bild, Kottmangd FROM Produkt, Kottmangd WHERE Produkt.KottmangdID = Kottmangd.KottmangdID AND Produkt.ProduktID = " & Request.Querystring("id")

Nu fungerar det. Tack för hjälpen!

Medlem sedan juni 200032 967 inlägg
#8

Sure thing. :)

Mvh

272 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
128 ms — deklarationer (db)
0 ms — hämta statistik (cache)
141 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)