Dim Conn, RsPriceListName, RsArticle
Dim sSQLPriceListName, sSQLArticle
Set Conn = CreateObject( "ADODB.Connection" )
Conn.Open Application.sDbConnectionString
Set RsPriceListName = CreateObject( "ADODB.Recordset" )
Set Rs = CreateObject( "ADODB.Recordset" )
sSQLPriceListName = "SELECT [Name] AS PriceListName FROM tblPriceList"
RsPriceListName.Open sSQLPriceListName, Conn, 1
sSQL =" Select a.[Id] AS ArticleId, a.[Name] AS ArticleName, a.[Nr] AS ArticleNo, a.[Unit] AS ArticleUnit," _
& " p.[Price] AS ArticlePrice, p.[Id] AS PriceId, p.ItemId," _
& " pl.[Name] AS PriceListName, pl.[Id] AS PriceListId" _
& " FROM tblArticle a" _
& " Inner join tblPrice p" _
& " on a.Id = p.ItemId" _
& " inner join tblpriceList pl" _
& " on p.[PriceListId] = pl.[Id]" _
& " Where p.ItemType = 4" _
& " AND a.[Nr] = '12744A'" _
& " ORDER BY a.[Nr]"
Rs.Open sSQL, Conn, 1
...
dim sPriceLists, sArticles, sPrices
set sPriceLists=CreateObject("Scripting.Dictionary")
set sArticles=CreateObject("Scripting.Dictionary")
set sPrices=CreateObject("Scripting.Dictionary")
Do while not RS.EOF
sPriceLists(cstr(Rs("PriceListId"))) = cstr(Rs("PriceListName"))
sArticles(cstr(Rs("ArticleName"))) = cstr(Rs("ArticleUnit"))
sPrices(cstr(Rs("PriceId"))) = cdbl(Rs("ArticlePrice"))
Rs.MoveNext
Loop
response.write "<table border='1'><tr><td>Artikelbenämning</td><td>Enhet</td>"
for each iPriceListId in sPriceLists
response.write "<td>" & sPriceLists(iPriceListId) & "</td>"
next
response.write "</tr>"
for each sArticle in sArticles
response.write "<tr><td>" & sArticle & "</td><td>" & sArticles(sArticle) & "</td>"
for each price in sPrices
response.write "<td>"
response.write sPrices(price)
response.write "</td>"
next
response.write "</tr>"
next
response.write "</table>"
Det funkar nästan...
Om jag bara hämtar en artikel fungerar det. Men när jag vil loopa ut alla, så skrivs alla priser på alla rader. Det skall ju bara skrivas det antalet priser som det finns kopplat till just den artikeln...
har du testat den där sql-frågan direkt i access?
utan att kolla närmare på den så verkar det som att du pga av din join där får med alla priser på alla varor. jag misstänker att det måste till lite Group By för att du skall få allt rätt
prevArticleId = ""
if rs.eof then
response.write "tomt!"
else
response.write "<table>"
response.write "<tr><td>Benämning</td><td>Enhet</td><td>Inköp</td><td>Standard</td><td>UE</td></tr>"
while not rs.eof
if rs("articleid") <> prevArticleId then
if prevArticleId <> "" then
response.write "</tr>"
end if
response.write "<tr>"
response.write "<td>" & rs("articleName") & "</td>"
response.write "<td>" & rs("ArticleUnit") & "</td>"
prevArticleId = rs("articleid")
end if
response.write "<td>" & rs("PriceListName") & "/" & rs("ArticlePrice") & "</td>"
rs.movenext
wend
response.write "</tr>"
response.write "</table>"
end if
Fungerar nästan...
Dock så kan jag inte få ut kolumnrubrikerna dynamsikt samt att de olika priserna byter kolumner enligt bifogad bild... :(
Loopa ut rubrikrad med alla prislistenamn. När du gör detta, spara ner någonstans en referens till vilken kolumn vilken prislista ligger i. (prisliste-id -> kolumnindex).
När du loopar ut produkterna slår du upp i ditt "någonstans" vilken kolumn du ska visa priset i. Är det inte den kolumnen det är dags att skriva ut, ja då är det dax att slänga fram en tom kolumn eller två.
Sen finns det säkert ett antal andra fina sätt att lösa det på, som antagligen är enklare...
Loopa ut rubrikrad med alla prislistenamn. När du gör detta, spara ner någonstans en referens till vilken kolumn vilken prislista ligger i. (prisliste-id -> kolumnindex).
När du loopar ut produkterna slår du upp i ditt "någonstans" vilken kolumn du ska visa priset i. Är det inte den kolumnen det är dags att skriva ut, ja då är det dax att slänga fram en tom kolumn eller två.
Sen finns det säkert ett antal andra fina sätt att lösa det på, som antagligen är enklare...
:(
Du har inte lust att ta det lite mer detaljrikt....?
Det hade jag tänkt mig. :)
Jag har lust att göra det mer detaljrikt. Jag skulle kunna tänka mig att bota cancer och rädda världen, men jag har inte tid till allt dessvärre. ;)