LarsG gav mig ett litet script innan men tyvärr fick jag ett felmeddelande och tänkte att det nog är lika bra att göra det själv. Jag vill alltså göra så här:
Namn: Bosse
Köpte: En gitarr
Pris: 2000
Namn: Lina
Köpte: En lina :OO
Pris: 20
Summa: 2020
Därför klurade jag upp följande struktur på koden som skulle summera alla "total" i databasen men av någon anledning skrivs inte summa ut, måste vara något fel i tankesättet....
<%
' Databaskoppling
' RecordSet som hämtar namn och lite sådant
Summa = 0
Do Until RecSet.EOF
total = RecSet("total")
Summa = Summa + total
' Listar ut namn och sådant...
RecSet.MoveNext
Loop
RecSet.Close
Connect.Close
Response.Write Summa
%>
"Hur vill du ha det om samma person har köpt flera (olika) saker?
Hur som helst så är det enklast att summera i VB-script då du går igenom alla poster.
q = "select * from t where orderdate between ... order by name"
set rs = connect.execute(q)
totper = 0.0
totall = 0.0
p = ""
while not rs.eof
if p<> "" and p <> rs("name") then
if totper <> 0.0 then response.write totper & "<br><br>"
p = rs("namn")
response.write p & "<br>"
totper = 0.0
end if
'övrig info
totall = totall + cdbl(rs("kostnad"))
totper = totperl + cdbl(rs("kostnad"))
rs.movenext
wend
if totper <> 0.0 then response.write totper & "<br><br>"
if totall <> 0.0 then response.write "Alla" & totper & "<br><br>"
Du får frilla till det lite."
... och jag måste säga att det nästan är lite för komplicerad för min smak.
Men saken är ju den att om jag använder din metod @nders (som jag också själv trodde att jag skulle bli föreslagen), så måste jag ju ha två RecordSet...
Jag missade att du skrev ut andra saker i din kod också, eftersom du tagit bort själva koden. Så jag fick för mig att det var det enda du ville göra. :-)
Då gör vi så här i stället. Du är inne på rätt spår med din kod, men du måste alltid se till att subtypskonvertera, så du lägger ihop tal som verkligen är tal. Det här borde fungera:
<%
' Databaskoppling
' RecordSet som hämtar namn och lite sådant
Summa = 0
Do Until RecSet.EOF
Summa = Summa + Cdbl(RecSet("fältet"))
' Listar ut namn och sådant...
RecSet.MoveNext
Loop
RecSet.Close
Connect.Close
Response.Write Summa
%>
På vilket sätt fungerade det inte tidigare?
Jag använde Cdbl() i koden för att typkonvertera till decimaltal.
Har du null i talfältet? Ha inte det. Se till att det står 0 istället.
Annars:
<%
' Databaskoppling
' RecordSet som hämtar namn och lite sådant
Summa = 0
Do Until RecSet.EOF
[b]If not IsNull(RecSet("fältet")) Then
Summa = Summa + Cdbl(RecSet("fältet"))
End if[/b]
' Listar ut namn och sådant...
RecSet.MoveNext
Loop
RecSet.Close
Connect.Close
Response.Write Summa
%>
Kanon, det fungerar faktiskt, det var bara en post i databasen som bråkade. Då var jag ju faktiskt inte så där _fruktansvärt_ långt ifrån i alla fall. :)
Men en sak... det där med Cdbl. Jag förstår inte riktigt när man använder...
I ASP / VbScript finns inga egentliga datatyper, utan alla variabler är av typen variant. Dock finns en hel del subtyper. För att du ska kunna använda talfunktioner på tal, och strängfunktioner på strängar, och datumfunktioner på datum, måste du se till att värdet är av rätt subtyp.
CDbl() - Konverterar någonting till en double, ett decimaltal (kan vara riktigt stort)
CSng() - Konverterar någonting till en single, ett decimaltal, inte lika stort som double.
CStr() - Konverterar till sträng
CDate() - Konverterar till datumtyp
CBool() - Konverterar ett värde till boolean, dvs true/false
CInt() - Konverterar till integer (heltal) (Dock max 32768, så vid stora tal, se nedan)
CLng() - Konverterar till long (heltal), kan vara attans stort.
Testade nedanstående kod med lyckat resultat, men om man vill summera fler fält, hur skall man då gå tillväga? Har testat på olika sätt men inte lyckats.
<%
' Databaskoppling
' RecordSet som hämtar namn och lite sådant
Summa_1 = 0
Do Until RecSet.EOF
If not IsNull(RecSet("fältet_1")) Then
Summa_1 = Summa_1 + Cdbl(RecSet("fältet_1"))
End if
' Listar ut namn och sådant...
RecSet.MoveNext
Loop
RecSet.Close
Connect.Close
Response.Write Summa_1
%>
Olika summor..
Fick fram 2 stycken olika på följande sätt, men när jag lägger till de jag nedan tagit bort så blir resultaten fel.
Summa_hm = 0
Summa_bm = 0
'Summa_bu = 0
Do Until RecSet.EOF
If not IsNull(RecSet("hm")) AND (RecSet("bm")) Then
'If not IsNull(RecSet("hm")) AND (RecSet("bm")) AND (RecSet("bu")) Then
Summa_hm = Summa_hm + Cdbl(RecSet("hm"))
Summa_bm = Summa_bm + Cdbl(RecSet("bm"))
'Summa_bu = Summa_bu + Cdbl(RecSet("bu"))
End if
' Listar ut namn och sådant...
RecSet.MoveNext
Loop
RecSet.Close
Connect.Close
Response.Write Summa_hm
Response.Write "-"
Response.Write Summa_bm
'Response.Write "-"
'Response.Write Summa_bu
If not IsNull(RecSet("hm")) Then
Summa_hm = Summa_hm + Cdbl(RecSet("hm"))
End if
If not IsNull(RecSet("bm")) Then
Summa_bm = Summa_bm + Cdbl(RecSet("bm"))
End if