webForumDet fria alternativet

Problem med ifsats

10 svar · 622 visningar · startad av dareknowak

dareknowakMedlem sedan mars 200973 inlägg
#1

Asså jag har suttit och kollat igenom den gång på gång men jag hittar absolut inget fel ändå får jag inte rätt värde.

Set objRS = objConn.Execute("SELECT Sum(antal) AS st, Sum(pris * antal) AS totalt FROM kundvagn WHERE user = '" & strUser & "'")
If objRS.Eof Then
Response.Write "0 artiklar i kundvagnen totalt: 0:-"
Else
Response.Write objRS("st") & " artiklar i kundvagnen totalt: " & FormatNumber(objRS("totalt"),0) & ":-"
End If

tabellen är helt tom och den vill fortfarande inte skriva ut "0 artiklar i kundvagnen totalt: 0:-"

Vad kan va fel?

LedelMedlem sedan dec. 2004736 inlägg
#2

SUM() returnerar väl ett värde, i det här fallet på antalet. Detta blir 0, men för att du ska få med informationen returneras det ju en rad till din objRS, och därmed finns det en rad i den.

voigtann1Medlem sedan juni 20019 519 inlägg
#3

Vad skriver objRS.RecordCount ut för antal träffar?

Peter SMedlem sedan dec. 20025 483 inlägg
#4

Det är för att SUM() returnerar NULL om inga träffar fås. Därför får du alltid en returrad.

dareknowakMedlem sedan mars 200973 inlägg
#5

Jo den borde väl returnera 0 men det gör det inte utan värdet är helt tomt när databasen är tom så att säga.

objRS.RecordCount skriver ut -1 (Även när det finns värde i databasen)

Men ifall det skulle returnera null borde ju "If objRS("st") = null Then" fungera?
Men det gör det inte.

Något förslag hur man kan lösa det? :)

Peter SMedlem sedan dec. 20025 483 inlägg
#6

Nej, den borde inte returnera 0 eftersom ingen summering skett. I stället returneras NULL (vilket du kan se genom att skriva t.ex. response.write isnull(objrs(0))).

dareknowakMedlem sedan mars 200973 inlägg
#7

Japp det returnerade True när databasen är tom så testade att ändra till detta

Set objRS = objConn.Execute("SELECT Sum(antal) AS st, Sum(pris * antal) AS totalt FROM kundvagn WHERE user = '" & strUSER & "'")
If isnull(objrs(0)) = True Then
Response.Write "0 artiklar i kundvagnen totalt: 0:-"
Else
Response.Write objRS("st") & " artiklar i kundvagnen totalt: " & FormatNumber(objRS("totalt"),0) & ":-"
End If

Och det funkar då, men kan jag göra såhär eller kommer det börjar krångla på något sätt längre fram?

Peter SMedlem sedan dec. 20025 483 inlägg
#8

Det kommer att fungera såvida inte "antal" eller "pris" innehåller NULL på någon rad i tabellen :)

LarsGMedlem sedan dec. 200012 464 inlägg
#9

NULL-värden elimineras vid summering. Resultatet blir null om alla rader är null.

dareknowakMedlem sedan mars 200973 inlägg
#10

Okej, Tack för hjälpen.

TroxyMedlem sedan mars 20041 505 inlägg
#11

Om du vill returnera 0 om inga poster finns så kan du använda coalesce:

SELECT Coalesce(Sum(antal), 0) AS st ...
131 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)