Men hur gör jag med det emininta scriptet du hjälpt mig med. Där är det ju en subrutin som använder sig av dictionaryobjektet? Där känns det inte lika självklart...
<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<% Option Explicit %>
<%session.lcid=1053%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Sökresultat</title>
<link href="Stylesheet/test.css" rel="stylesheet" type="text/css">
</head>
<body>
<%
Dim objConn, strSearch, strSQL, objRS, intCounter, objDict, strEnumber, strArticleName, strUnit, strSupplier, curPrice, strFC, strLowest, strLastENumber, strLastSupplier, objPricesDict, strOrder, strOrder2, bgcolor
strSearch = Trim(Replace(Request.Form("searchField"), "'", "''")) ' Notera att vi inte får glömma bort att skydda oss mot SQL injections
strOrder = Request.Form("order")
If strOrder = "eNumber" then
strOrder2 = "tblArticle.eNumber"
End If
If strOrder = "articleName" then
strOrder2 = "tblArticle.articleName, tblArticle.eNumber"
End if
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.ConnectionString = "DSN=Prislista"
server.MapPath("Prislista.mdb")
objConn.Open
strSQL = "SELECT DISTINCT tblArticle.eNumber, articleName, articleUnit, articlePrice, SupplierName FROM (tblArticle INNER JOIN tblPrice ON tblArticle.eNumber = tblPrice.eNumber) INNER JOIN tblSupplier ON tblPrice.articleSupplierId = tblSupplier.SupplierId WHERE tblArticle.eNumber LIKE '%" & strSearch & "%' ORDER BY " & strOrder2 & ", tblPrice.articlePrice ASC"
'Response.Write strSQL & "<br><br>"
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("Din sökning på <b>" & strSearch & "<b> gav inget resultat. Försök igen!<br>")
Else
Response.Write("<span class=""text"">Du har sökt på E-nummer: <b>" & strSearch & "</b></span><br><br>")
Response.write "<table width=""800"" border=""0"" cellspacing=""0"" cellpadding=""0""><tr><td width=""75"" height=""18"" class=""tabellhuvud"">E-nummer</td><td width=""250"" class=""tabellhuvud"">Benämning</td><td width=""50"" class=""tabellhuvud"">Enhet</td><td width=""90"" class=""tabellhuvud"">Solar</td><td width=""90"" class=""tabellhuvud"">Storel</td><td width=""120"" class=""tabellhuvud"">Elektroskandia</td><td width=""100"" class=""tabellhuvud"">Lägst pris</td><td width=""25"" class=""tabellhuvud"">Antal</td></tr>"
Do While not objRS.EOF
strENumber = "" & objRS("ENumber")
strArticleName = "" & objRS("articleName")
strUnit = "" & objRS("articleUnit")
strSupplier = "" & objRS("SupplierName")
curPrice = FormatCurrency(CLng(objRS("articlePrice"))*0.01)
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.
Response.Write strLastSupplier
objDict.Item(strLastSupplier) = Replace(objDict.Item(strLastSupplier), "black", "red")
call writePrices(objDict)
Response.Write "</table>"
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 bgcolor=""" & bgcolor & """><class=""itabell""><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"">y</td></tr>"
end sub
%>
</body>
</html>
när du loopar ut grejerna och lägger in i dictionaryobjektet så kollar du av vilken leverantör det gäller, lägg ihop med det som tidigare fanns i leverantörssummevariabeln.
Före recordset-loopen, initiera dina totalvariabler:
lngTotalStorel = 0
lngTotalElektroSkandia = 0
...
Sedan, i recordset-loopen, exempelvis precis före if strENumber <> strLastEnumber then:
Select case strSupplier
Case "Storel"
lngTotalStorel = lngTotalStorel + CLng(objRS("articlePrice"))
Case "ElektroSkandia"
lngTotalElektroSkandia = lngTotalElektroSkandia + CLng(objRS("articlePrice"))
....
End Select
Sedan kan du använda variablerna där du vill (under förutsättning att loopen är färdigkörd, vill säga.)
... och under förutsättning att jag förstått vad du vill göra.