Avatar billede kraghjensen Nybegynder
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.
Avatar billede eagleeye Praktikant
17. marts 2006 - 00:05 #1
Ja det er i SQL sætningen det skal ind.

Hvordan ved du hvilken leverandør det er ud fra ordrenr ?

Har du evt. levenrandør id på ordren?
Avatar billede eagleeye Praktikant
17. marts 2006 - 00:10 #2
Ok nu er jeg lidt i tvivl om hvad du ønsker.
Skal den vise alle leverandører af en vare?
Avatar billede kraghjensen Nybegynder
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
Avatar billede eagleeye Praktikant
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
%>
Avatar billede kraghjensen Nybegynder
17. marts 2006 - 13:14 #5
Jeg har brugt løsning nr. 2 som virker fint - læg et svar og tak for hjælpen.
Avatar billede eagleeye Praktikant
17. marts 2006 - 16:45 #6
Ok her et svar :)
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