Har följande kod som inte funkar som jag vill.... (som vanligt )
...och nu kommer koden!
<%
Dim objConn, strSearchField, strSQL, objRS, intCounter, objDict, strEnumber, strArticleName, strUnit, strSupplier, curPrice, strFC, strLowest, strLastENumber, strLastSupplier, objPricesDict, strOrder, bgcolor, strOption, strShow, lngTotalStorel, lngTotalSolar, strQuantity, pricesetting
If session("userId") <> "" Then
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.ConnectionString = "DSN=IntranetSydostel"
objConn.Open
if Request.Cookies("sydostel")("pricesetting") = "" then
pricesetting = 0
else
pricesetting = cint(Request.Cookies("sydostel")("pricesetting"))
end if
if pricesetting = 0 then
' SQL-fråga för priser avtal
strSQL = "SELECT tblArticle.articleName, tblArticle.articleUnit, tblCart.userId, tblCart.quantity, tblDiscount.articleDiscount, tblPrice.articlePrice, tblSupplier.SupplierName, tblArticle.eNumber, 0.01*[articlePrice]*(1-([articleDiscount]*0.01)) AS articlePriceWithDiscount FROM (((tblArticle INNER JOIN tblCart ON tblArticle.eNumber = tblCart.eNumber) INNER JOIN tblPrice ON tblArticle.eNumber = tblPrice.eNumber) INNER JOIN tblDiscount ON tblPrice.articleCategory = tblDiscount.articleCategory) INNER JOIN tblSupplier ON tblPrice.articleSupplierId = tblSupplier.SupplierId WHERE tblCart.userId = " & session("userId") & " ORDER BY tblArticle.eNumber, 0.01*[articlePrice]*(1-([articleDiscount]*0.01)) ASC"
else
' SQL-fråga för priser netto
strSQL = "SELECT tblArticle.articleName, tblArticle.articleUnit, tblCart.userId, tblCart.quantity, tblDiscount.articleDiscount, tblPrice.articlePrice, tblSupplier.SupplierName, tblArticle.eNumber FROM (((tblArticle INNER JOIN tblCart ON tblArticle.eNumber = tblCart.eNumber) INNER JOIN tblPrice ON tblArticle.eNumber = tblPrice.eNumber) INNER JOIN tblDiscount ON tblPrice.articleCategory = tblDiscount.articleCategory) INNER JOIN tblSupplier ON tblPrice.articleSupplierId = tblSupplier.SupplierId WHERE tblCart.userId = " & session("userId") & " ORDER BY tblArticle.eNumber, tblPrice.articlePrice ASC"
end if
lngTotalStorel = 0
lngTotalSolar = 0
Set objRS = Server.CreateObject("ADODB.Recordset")
objRS.Open strSQL, objConn, 3, 1 ' Recordsetet öppnar vi så här för att kunna få ut ett värde från egenskapen recordcount.
intCounter = 0 ' skapa en liten posträknare som vi sedan räknar upp
Set objDict = Server.CreateObject("Scripting.Dictionary") 'ett dictionaryobjekt
If objRS.EOF then
Response.Write("<span class=""text12px"">Varukorgen är tom!</span><br>")
Else
Response.Write("<br>")
Response.Write("<span class=""text12px"">Följande artiklar finns i varukorgen:<br>")
Response.write "<table width=""780"" border=""0"" cellspacing=""0"" cellpadding=""0"" Class=""tabellRam""><tr class=""tabellhuvud""><td width=""60"" height=""18"" class=""tabellhuvud"">E-nr</td><td width=""250"" class=""tabellhuvud"">Benämning</td><td width=""45"" class=""tabellhuvud"">Enhet</td><td width=""75"" class=""tabellhuvud"">Solar</td><td width=""75"" class=""tabellhuvud"">Storel</td><td width=""75"" class=""tabellhuvud"">Ahlsell</td><td width=""60"" class=""tabellhuvud"">Lägst</td><td width=""60"" class=""tabellhuvud"">Antal</td><td width=""40"" class=""tabellhuvud"">Ändra</td><td width=""40"" class=""tabellhuvud"">ta bort</td></tr>"
Do While not objRS.EOF
strENumber = "" & objRS("ENumber")
strArticleName = "" & objRS("articleName")
strUnit = "" & objRS("articleUnit")
strSupplier = "" & objRS("SupplierName")
strQuantity = "" & objRS("quantity")
if pricesetting = 0 then
curPrice = "" & FormatCurrency(Cdbl(objRS("articlePriceWithDiscount")))
Else
curPrice = "" & FormatCurrency(Cdbl(objRS("articlePrice"))*0.01)
End If
If pricesetting = 0 then
Select case strSupplier
Case "Storel"
lngTotalStorel = lngTotalStorel + Cdbl(objRS("articlePriceWithDiscount"))
Case "Solar"
lngTotalSolar = lngTotalSolar + Cdbl(objRS("articlePriceWithDiscount"))
End Select
Else
Select case strSupplier
Case "Storel"
lngTotalStorel = lngTotalStorel + Cdbl(objRS("articlePrice")*0.01)
Case "Solar"
lngTotalSolar = lngTotalSolar + Cdbl(objRS("articlePrice")*0.01)
End Select
End if
if strENumber <> strLastEnumber then
if intCounter <> 0 then
' aha, här har det gjorts saker förut. Skicka iväg till utskriftsfunktionen.
' markering av det jättesunkiga priset
objDict.Item(strLastSupplier) = Replace(objDict.Item(strLastSupplier), "black", "red")
call writePrices(objDict)
objDict.RemoveAll
end if
set objDict = Server.CreateObject("Scripting.Dictionary")
objDict.Add "eNumber", strENumber
objDict.Add "articleName", strArticleName
objDict.Add "articleUnit", strUnit
intCounter = 1
strLastENumber = strENumber
else
intCounter=intCounter + 1
end if
if not objDict.Exists(strSupplier) then
' Bara en säkerhetskoll att vi inte lägger in något om det redan är inlagt för denna leverantör
select case intCounter
case 1
' weee, det här är det jättebästa priset!
strFC = "green"
objDict.Add "lowest", strSupplier
case else
strFC = "black"
end select
strLastSupplier = strSupplier
objDict.Add strSupplier, "<font color=""" & strFC & """>" & curPrice & "</font>"
end if
objRS.MoveNext
Loop
' Vi måste köra visningskoden här också för att få med den sista produkten.
objDict.Item(strLastSupplier) = Replace(objDict.Item(strLastSupplier), "black", "red")
call writePrices(objDict)
Response.write "<tr class=""text10px_fet""><td width=""60"" height=""18"" ></td><td width=""250""></td><td width=""45"">Summa</td><td width=""75"">" & FormatCurrency(lngTotalSolar) & "</td><td width=""75"">" & FormatCurrency(lngTotalStorel) & "</td><td width=""75""></td><td width=""60""></td><td width=""50""></td></tr>"
Response.Write "</table>"
Response.write "<span class=""statusText"">Samtliga priser är exklusive moms!<br></span>"
if pricesetting = 0 then
Response.Write "<span class=""statusText"">Visar <b>avtalspriser<b></span>"
Else
Response.Write "<span class=""statusText"">Visar <b>Nettopriser<b></span>"
End If
End if
objRS.Close
Set objRS = Nothing
objConn.Close
Set objConn = Nothing
Set objDict = Nothing
Set objPricesDict = Nothing
public sub writePrices (objPricesDict)
If bgcolor = "#FFFFFF" then bgcolor = "#EFEFEF" else bgcolor = "#FFFFFF"
Response.write "<tr onMouseOver=""this.style.backgroundColor='#D3DEF8';"" onMouseOut=""this.style.backgroundColor='';"" bgcolor=""" & bgcolor & """><td height=""20"" class=""itabell"">" & objPricesDict.Item("eNumber") & "</td><td class=""itabell"">" & objPricesDict.Item("articleName") & "</td><td class=""itabell"">" & objPricesDict.Item("articleUnit") & "</td>"
if objPricesDict.Exists("Solar") then
Response.write "<td class=""itabell"">" & objPricesDict.Item("Solar") & "</td>"
else
Response.write "<td class=""itabell""><i>Saknas</i></td>"
end if
if objPricesDict.Exists("Storel") then
Response.write "<td class=""itabell"">" & objPricesDict.Item("Storel") & "</td>"
else
Response.write "<td class=""itabell""><i>Saknas</i></td>"
end if
if objPricesDict.Exists("Elektroskandia") then
Response.write "<td class=""itabell"">" & objPricesDict.Item("Elektroskandia") & "</td>"
else
Response.write "<td class=""itabell""><i>Saknas</i></td>"
end if
Response.write "<td class=""itabell"">" & objPricesDict.Item("lowest") & "</td>"
Response.Write "<td class=""itabell""><input class=""formular"" name=""quantity" & objPricesDict.Item("eNumber") & """ Value=" & strQuantity & " type=""text"" size=""4"" maxlength=""4""></td>"
Response.Write "<td class=""itabell""><a href=""#"" onclick=""location.href='../cart/editQuantity.asp?eNumber=" & objPricesDict.Item("eNumber") & "&quantity=' + document.getElementById('quantity" & objPricesDict.Item("eNumber") & "').value;""><img src=""../Images/editQuantity.gif"" alt=""Klicka här för att ändra antal!"" border=""0""></a></td>"
Response.Write "<td class=""itabell""><a href=""deleteArticle.asp?eNumber=" & objPricesDict.Item("eNumber") & """><img src=""../Images/soptunna.gif"" alt=""Klicka här för att ta bort artikeln!"" border=""0""></a></td>"
end sub
Else
Response.Write "Ej inloggad"
End if
%>
Problemet är:
När jag loopar ut recordsetet skrivs rätt värde ut. När jag försöker få ut värdena i suben så stämmer ingenting!
Du sätter ju om värdet i loopen hela tiden, så strQuantity innehåller antagligen värdet från den sista posten.
Du kan ju försöka att skapa ett till dictionaryobjekt för antalen, där du lagrar artikelnumret som nyckel, och antal som value. SKicka sedan det dictionaryobjektet till subben också, och skriv ut värdena därifrån.