16. marts 2006 - 23:47
Der er
5 kommentarer og
1 løsning
Måske en SQL opgave
Jeg skulle gerne have vist flere leverandører til en given ordre i en tabel, hvor varen i ordren kun skal vises en gang.
Min kode ser sådan ud:
<html>
<head>
<title></title>
</head>
<link rel="stylesheet" href="style.css" type="text/css">
<body>
<%
set conn = server.createObject("ADODB.Connection")
conn.open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & server.mappath("db.mdb")
'denne Query grupper posterne så varen kun vises en gang til tabellen
Query_antal="SELECT tbl_ordre.model, tbl_produkter.produkttype, tbl_ordre.antal, tbl_ordre.ansvarordre,tbl_ordre.initialer, tbl_ansvar.Initialer_godkender, tbl_ordre.ordrenr, tbl_ordre.ordredato FROM tbl_leverandor INNER JOIN (tbl_ansvar INNER JOIN (tbl_produkter INNER JOIN tbl_ordre ON tbl_produkter.produktmodel = tbl_ordre.model) ON tbl_ansvar.Ansvar = tbl_ordre.ansvarordre) ON tbl_leverandor.leverandor = tbl_produkter.leverandor GROUP BY tbl_ordre.model, tbl_produkter.produkttype, tbl_ordre.antal, tbl_ordre.ansvarordre, tbl_ordre.initialer, tbl_ansvar.Initialer_godkender, tbl_ordre.ordrenr, tbl_ordre.ordredato"
Set rs_antal= Conn.Execute(Query_antal)
%>
<h2>Ikke afgivet ordre</h2>
<br>
<a href="default.asp">Tilbage for forsiden</a>
<table border="1" width="775" cellspacing="0" cellpadding="0" style="border-collapse: collapse">
<tr>
<td width="150">
<h3>Produkt</h3>
</td>
<td width="150">
<h3>Model</h3>
</td>
<td width="150">
<h3>Antal</h3>
</td>
<td width="150">
<h3>Initialer</h3>
</td>
<td width="150">
<h3>Leverandører</h3>
</td>
<td width="150">
<h3>Bestilt:</h3>
</td>
<td width="150">
<h3>ordrenr:</h3>
</td>
<td width="150">
<h3>Ordre afgivet:</h3>
</td>
</tr>
<tr>
<%
Do While Not rs_antal.EOF
ordrenr = rs_antal("ordrenr")
%>
<td width="150"><p><%=rs_antal("produkttype")%></p></td>
<td width="150"><p><%=rs_antal("model")%></p></td>
<td width="150"><p><%=rs_antal("Antal")%></p></td>
<td width="150"><p><%=rs_antal("initialer")%></p></td>
<td width="150"><p>Her skal leverandørerne vises</p></td>
<td width="175"><p><%=rs_antal("ordredato")%></p></td>
<td width="150"><p><%=rs_antal("ordrenr")%></p></td>
<td width="150">Ja</td>
</tr>
<%
rs_antal.MoveNext
Loop
%>
</table>
</body>
</html>
Mit problem er hvordan får jeg vist hvilken leverandører har varerne bestilles hos. Hver vare kan bestilles hos 3-4 leverandører.
Jeg har prøvet at tilføje leverandør felterne i Query, men så vises en ordre flere gange hvis der er flere leverandører til en gældende vare.
Jeg ved ikke om det er SQL-sætningen der skal laves om, eller hvad det er, men et hvert forslag er velkommen.
17. marts 2006 - 07:10
#3
Ja, jeg ved hvilken leverandører det er ud fra ordren, idet en bestilt vare har relation over til en leverandørtabel - og jeg har et leverandørid.
Og ja den skal vise alle leverandører af en vare
17. marts 2006 - 08:35
#4
Ok umiddelbart kan jeg se to løsninger den først at lave din SQL om som du har prøvet så kommer varen godt nok med X antal gange men så kan man lave om i loopet så den udskriver varen når man har samlet alle leverandører varen, koden bliver godt nok noget anderledes. Den anden løsning er at lave en ny SQL sætning som henter leverandører til en vare og ligge koden hvor der står "Her skal leverandørerne vises".
I begge tilfælde skal dette styk kode rette:
<tr>
<%
Do While Not rs_antal.EOF
ordrenr = rs_antal("ordrenr")
%>
<td width="150"><p><%=rs_antal("produkttype")%></p></td>
<td width="150"><p><%=rs_antal("model")%></p></td>
<td width="150"><p><%=rs_antal("Antal")%></p></td>
<td width="150"><p><%=rs_antal("initialer")%></p></td>
<td width="150"><p>Her skal leverandørerne vises</p></td>
<td width="175"><p><%=rs_antal("ordredato")%></p></td>
<td width="150"><p><%=rs_antal("ordrenr")%></p></td>
<td width="150">Ja</td>
</tr>
<%
rs_antal.MoveNext
Loop
%>
Koden til det første løsnings forslag, er dette:
<%
oldVare = ""
sStart = ""
sSlut = ""
sLev = ""
Do While Not rs_antal.EOF
ordrenr = rs_antal("ordrenr")
if oldVare <> rs_antal("produkttype") then
oldVare = rs_antal("produkttype")
sStart = "<tr>"
sStart = sStart & "<td width=""150""><p>" & rs_antal("produkttype") & "</p></td>"
sStart = sStart & "<td width=""150""><p>" & rs_antal("model") & "</p></td>"
sStart = sStart & "<td width=""150""><p>" & rs_antal("Antal") & "</p></td>"
sStart = sStart & "<td width=""150""><p>" & rs_antal("initialer") & "</p></td>"
sSlut = "<td width=""175""><p>" & rs_antal("ordredato") & "</p></td>"
sSlut = sSlut & "<td width=""150""><p>" & rs_antal("ordrenr") & "</p></td>"
sSlut = sSlut & "<td width=""150"">Ja</td>"
sSlut = sSlut & "</tr>"
sLev = "<td width=""150""><p>" & rs_antal("leverandor")
sLevSlut = "</p></td>"
else
sLev = sLev & "<br>" & rs_antal("leverandor")
end if
rs_antal.MoveNext
udskriv = false
if rs_antal.EOF then
udskriv = true
else
if oldVare <> rs_antal("produkttype") then
udskriv = true
end if
end if
'Udksriver kolonnene her:
if udskriv = true then
Response.Writre sStart
Response.Writre sLev & sLevSlut
Response.Writre sSlut
end if
Loop
%>
_________________________
Koden til andet løsnings forslag:
<%
Do While Not rs_antal.EOF
ordrenr = rs_antal("ordrenr")
%>
<tr>
<td width="150"><p><%=rs_antal("produkttype")%></p></td>
<td width="150"><p><%=rs_antal("model")%></p></td>
<td width="150"><p><%=rs_antal("Antal")%></p></td>
<td width="150"><p><%=rs_antal("initialer")%></p></td>
<td width="150"><p>
<%
'lav en SQL sætning her som henter alle leverandører til en vare
lsql = "select * from tbl_leverandor where varenr = " & rs_antal("produkttype")
set rs_lev = Conn.Execute(lqsl)
do while not rs_lev.EOF
response.write rs_lev("leverandor")
rs_lev.Movenext
if not rs_lev.EOF then response.write "<br>"
loop
%>
</p></td>
<td width="175"><p><%=rs_antal("ordredato")%></p></td>
<td width="150"><p><%=rs_antal("ordrenr")%></p></td>
<td width="150">Ja</td>
</tr>
<%
rs_antal.MoveNext
Loop
%>