---
title: "Beräkningar i Recordset"
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/121874-beräkningar-i-recordset"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "devotion"
published: "2005-02-07T07:21:40.000Z"
updated: "2005-02-10T16:15:23.000Z"
replies: 16
views: 538
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/asp/121874-beräkningar-i-recordset"
---

# Beräkningar i Recordset

## #1 — devotion, 2005-02-07T07:21Z

:) 

Hej

Hur gör man för att göra beräkningar i ett recordset som loopas.

Tex summera mm.

mvh

Permalänk: https://www.webforum.nu/p/121874

## #2 — @nders, 2005-02-07T07:27Z

Man ska bara se till att göra subtypskonverteringar för att se till att man hanterar tal.

```
dblSum = 0
while not objRS.EOF
     dblSum = dblSum + CDbl(objRS("fält"))
     objRS.MoveNext
wend
```

Kika på typkonverteringsfunktionerna här: <http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/vtorifunctions.asp> (de flesta funktioner som börjar på c är typkonverteringsfunktioner.)

Mvh

Permalänk: https://www.webforum.nu/p/1548337

## #3 — devotion, 2005-02-07T07:44Z

:) 
Okidoki...

Det var ju inte så svårt!

Mvh

Permalänk: https://www.webforum.nu/p/1548340

## #4 — devotion, 2005-02-07T13:44Z

:) 

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>
```

mvh

Permalänk: https://www.webforum.nu/p/1548465

## #5 — @nders, 2005-02-07T13:50Z

Vad är det du vill räkna ut för något? :)

Permalänk: https://www.webforum.nu/p/1548469

## #6 — devotion, 2005-02-07T13:57Z

:r 
Jo....

Jag har tänkt använda en modifierad variant av scriptet till en varukorg.

Då radas ju alla artiklar upp i en tabell. Tanken var att summera alla priser så att man kan se vad totalkostnaden blir för respektive leverantör...

...är inte lätt att få svar om man frågar dåligt... :e 

mvh

Permalänk: https://www.webforum.nu/p/1548473

## #7 — devotion, 2005-02-07T21:18Z

:)  :)

Permalänk: https://www.webforum.nu/p/1548667

## #8 — @nders, 2005-02-08T04:39Z

Jag hade gjort så här i loopen:

1) skapa en variabel för varje leverantör
2) 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.

Mvh

Permalänk: https://www.webforum.nu/p/1548733

## #9 — devotion, 2005-02-08T07:01Z

Låter enkelt ;) 
Ska försöka!

mvh

Permalänk: https://www.webforum.nu/p/1548746

## #10 — devotion, 2005-02-08T15:03Z

:( Satan
Känner att viljan och idérikedomen är större än kunskapen just nu...

Fattar ingenting :( 

Mvh

Permalänk: https://www.webforum.nu/p/1548900

## #11 — devotion, 2005-02-08T22:18Z

:x  :x  :x  :x

Permalänk: https://www.webforum.nu/p/1549082

## #12 — @nders, 2005-02-09T04:04Z

Hur ser dina försök ut då? :)

Permalänk: https://www.webforum.nu/p/1549147

## #13 — devotion, 2005-02-09T05:32Z

:( 
Finns inte så mycket till försök.............

Hade det varit ett vanligt loopat recordset hade det inte varit några problem. 

MEN, kan inte få ihop det med dictionaryobjektet...

Punkt 1 skapa en variabel för varje leverantör

```
strSupplier = "" & objRS("SupplierName")
```

Leverantörens namn loopas ut ur recordsetet

Skall jag använda det och göra en variabel för varje leverantör?

Punkt 2

Tyvärr, fattar inte  :( 

mvh

Permalänk: https://www.webforum.nu/p/1549148

## #14 — devotion, 2005-02-09T17:50Z

Please

Permalänk: https://www.webforum.nu/p/1549414

## #15 — @nders, 2005-02-09T19:03Z

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.

mvh

Permalänk: https://www.webforum.nu/p/1549471

## #16 — devotion, 2005-02-09T19:05Z

:e

Du är snäll @nders!

Ska prova med en gång!

mvh

Permalänk: https://www.webforum.nu/p/1549473

## #17 — devotion, 2005-02-10T16:15Z

Hej!

Sumeringsfunktionen fungerar och jag lär mig hela tiden...

Tack!

Nu är det andra problem istället... (se SQL-forumet)

Men, detta problem är löst i alla fall

Hmmm, vilket svar ska accepteras som slutligt??

mvh

Permalänk: https://www.webforum.nu/p/1549889

---

Tråden på webben: https://www.webforum.nu/amne/asp/121874-beräkningar-i-recordset
