Avatar billede fomse Nybegynder
27. oktober 2003 - 09:50 Der er 23 kommentarer og
2 løsninger

Hvorfo rviser SUM ikke nul?

Hvis man bruger COUNT og der ikke er nogle poster at counte så skrives der 0 men ikke hvis man anvender SUM!
Hvad kan man gøre så den skriver 0 hvis der ikke er nogle poster at summere?

Fomse:-)
Avatar billede korup Nybegynder
27. oktober 2003 - 09:56 #1
Du kan jo teste om du er EOF (End og File) hår du har slået op i databasen, og er du EOF så indeholder den ikke noget og er så 0..

/korup
Avatar billede fomse Nybegynder
27. oktober 2003 - 10:01 #2
Koden ser således ud:

<html>
<head>
    <title>Untitled</title>

    <style type="text/css">
<!--
-->
</style>

</head>

<body topmargin="20" leftmargin="30">

<%


' Databaseforbindelse - husk at angive sti til din database
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("kmregnskab.mdb")
Conn.Open DSN

' Henter data ud til en dropdown boks
sSql = "SELECT id, navn FROM medlem"
Set Rs = Conn.Execute(sSql)
Do while not Rs.EOF
    strHtml = strHtml & "<option value='"& Rs("id") &"'>"& Rs("navn") &"</option>"
Rs.MoveNext
Loop

' Henter vores id ud. Sættes først til -1 hvis der ikke er noget id.
If IsEmpty(Request.Form("member")) Then
    intId = -1
else
    intId = Request.Form("member")
End If

Function printRs(rs)
do while not rs.eof
    strPrint = strPrint & "<strong><font color=""#ff0000"">"  & rs("dato") & "</font></strong>&nbsp;&nbsp;" & Rs("km") & "<br>"
rs.movenext
loop
printRs = strPrint
End Function

%>

<form action="viskmregnskab.asp" method="post">
<select name="member">
<option value=selected>Vælg</option>
<%= strHtml %>
</select>
<input type="submit" value="Se statistik">
</form>

<%

If Not intId = -1 Then
    Response.Write("Du har ialt indtastet " & Conn.Execute("SELECT COUNT(ID) AS Antal FROM KmData WHERE id =" & intId)(0) & " træningspas i KM-regnskabet.<br>" & vbcrlf)
    Response.Write("Du har indtastet " & Conn.Execute("SELECT COUNT(Træningsform) AS AntalLAND FROM KmData WHERE Træningsform = 'Landevej' AND id = " & intId)(0) & " træningspas vedr. landevej.<br>")
    Response.Write("Du har indtastet " & Conn.Execute("SELECT COUNT(Træningsform) AS AntalLAND FROM KmData WHERE Træningsform = 'MTB' AND id = " & intId)(0) & " træningspas vedr. MTB.<br>")
    Response.Write("Du har kørt " & Conn.Execute("SELECT SUM(KM) AS Summen FROM KmData WHERE id = " & intId)(0) & " kilometer ialt.<br><br>")
    Set Rs = Conn.Execute("SELECT * FROM KmData WHERE Træningsform = 'Landevej' AND id = " & intId & " ORDER BY Dato DESC")
    Response.Write("<strong>LANDEVEJ:</strong><br>" & printRs(rs))
    Response.Write("<p>Du har kørt " & Conn.Execute("SELECT SUM(KM) AS Summen FROM KmData WHERE Træningsform = 'Landevej' AND id = " & intId)(0) & " kilometer på landevejen ialt.</p>")
    Response.Write("<br><br>")
    Set Rs = Conn.Execute("SELECT * FROM KmData WHERE Træningsform = 'MTB' AND id = " & intId & " ORDER BY Dato DESC")
    Response.Write("<strong>MTB:</strong><br>" & printRs(rs))
    Response.Write("<p>Du har kørt " & Conn.Execute("SELECT SUM(KM) AS Summen FROM KmData WHERE Træningsform = 'MTB' AND id = " & intId)(0) & " kilometer på mountainbike ialt.</p>")
    Response.Write("<br><br>")
End If
%>

Klik og vend tilbage til <a href="indtastning.asp" target="_top">indtastningsfeltet</a>
</body>
</html>

Hvordan gør jeg?

Fomse:-)
Avatar billede korup Nybegynder
27. oktober 2003 - 11:02 #3
Hej.

Du kan i dene forespørgsler sætte en IFNULL ind.
Så kommer de til at se sådan ud:
Conn.Execute("SELECT IFNULL(SUM(KM),0) AS Summen FROM KmData WHERE Træningsform = 'MTB' AND id = " & intId)(0)

Det vigtige:
IFNULL(SUM(KM),0)

Så hvis summer er NULL bliver den 0..

/korup
Avatar billede fomse Nybegynder
27. oktober 2003 - 11:09 #4
Den kommer med flg. fejl:

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC Microsoft Access Driver] Undefined function 'IFNULL' in expression.

/KMregnskab/viskmregnskab.asp, line 69
Avatar billede gurvic Nybegynder
28. oktober 2003 - 08:49 #5
der kan du vel godt selv se fejlen???

husk et mellemrum ml if og null
Avatar billede fomse Nybegynder
28. oktober 2003 - 10:38 #6
Opdagede det med mellemrum men kan stadig ikke få det til at virke!!

Koden:
Response.Write("Du har kørt " & Conn.Execute("SELECT IF NULL(SUM(KM),0) AS Summen FROM KmData WHERE id = " & intId)(0) & " kilometer ialt.<br><br>")

Fejl:
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 'IF NULL(SUM(KM),0)'.
/KMregnskab/viskmregnskab.asp, line 62

Kender ikke funktionen IF NULL og hvordan den bygges op! Er rimelig newbie i ASP, kan du evt. forklare mig det eller henvise til et sted hvor jeg kan læse om det?

Fomse:-)
Avatar billede gurvic Nybegynder
28. oktober 2003 - 10:42 #7
prøver lige at hitte ud af en løsning...
Avatar billede gurvic Nybegynder
28. oktober 2003 - 10:50 #8
kan du ikke lige prøve at erstatte

Response.Write("<p>Du har kørt " & Conn.Execute("SELECT SUM(KM) AS Summen FROM KmData WHERE Træningsform = 'MTB' AND id = " & intId)(0) & " kilometer på mountainbike ialt.</p>")

med


Response.Write("Du har kørt ")
sql = "SELECT SUM(KM) AS Summen FROM KmData WHERE Træningsform = 'MTB' AND id = " & intId(0) &" "
set rs = Conn.Execute(sql)

if not rs("Summen").eof then
    response.write rs("Summen") else
    response.write("0")
end if

response.write"kilometer på mountainbike"



bare lige for at se om det funger
Avatar billede fomse Nybegynder
28. oktober 2003 - 10:56 #9
Nope! Siden vises slet ikke....
Avatar billede gurvic Nybegynder
28. oktober 2003 - 11:01 #10
hvad melder den af fejl?
Avatar billede fomse Nybegynder
28. oktober 2003 - 11:01 #11
Har også prøvet med:

Set kilometer = Conn.Execute("SELECT SUM(KM) AS Summen FROM KmData WHERE Træningsform = 'Landevej' AND id = " & intId & "")

'If kilometer("Summen") = "" Then
    'kilom = "0"
'Else
    'kilom = kilometer("summen")
'End If

'Response.Write("Du har kørt " & kilom & " kilometer på landevejen ialt.<br>")

Det duede heller ikke....
Avatar billede fomse Nybegynder
28. oktober 2003 - 11:01 #12
HTTP 500 - Internal server error
Internet Explorer
Avatar billede gurvic Nybegynder
28. oktober 2003 - 11:02 #13
??? ikke noget med fejl i linie xxx??
Avatar billede fomse Nybegynder
28. oktober 2003 - 11:04 #14
Nope..
Avatar billede gurvic Nybegynder
28. oktober 2003 - 11:04 #15
men du kunne godt kører det inden du erstattede de linier jeg skrev?
Avatar billede fomse Nybegynder
28. oktober 2003 - 11:05 #16
Kan evt. lige zippe det og sende det til dig! Måske hvis du ser hvordan det hænger sammen så kan du bedre løse det?
Jeg har i hvert tilfælde mistet overblikket:-D

Fomse
Avatar billede gurvic Nybegynder
28. oktober 2003 - 11:06 #17
kender det godt har du msn?
Avatar billede fomse Nybegynder
28. oktober 2003 - 11:07 #18
Jep! henrik@fomsgaard.com
Avatar billede gurvic Nybegynder
28. oktober 2003 - 11:45 #19
svar ;)
Avatar billede fomse Nybegynder
28. oktober 2003 - 11:47 #20
gurvic kom med løsningen:

Response.Write("Du har kørt ")
sqldml = "SELECT * FROM KmData WHERE Træningsform = 'MTB' AND id = " & intId & " " set rsdml = Conn.Execute(sqldml)
if rsdml.eof then
response.write("0 ")
else
sqldml2 = "SELECT sum(KM) as Summen FROM KmData WHERE Træningsform = 'MTB' AND id = " & intId & " " set rsdml2 = Conn.Execute(sqldml2)   
response.write rsdml2("Summen")
end if
response.write" kilometer på mountainbike"

Men korup har gjort en stor indsats så der falder lige lidt af til ham også:-)

Fomse
Avatar billede korup Nybegynder
28. oktober 2003 - 16:44 #21
Hej

Jeg tror at fejlen med 'IFNULL' er at det kun virker ved MySQL og ikke med en Access database..
Du kan prøve 

IIF(ISNULL(SUM(KM),0))

Den skulle virke i access..

/korup
Avatar billede fomse Nybegynder
29. oktober 2003 - 06:38 #22
Hej Korup>>

Hmm den skriver stadig to many exprecions in argument 'IIF(ISNULL(SUM(KM),0))'
Tror ikke man kan undgå de if-else ting....
Men det ville havet være meget nemmere, der skal en hel del kode til bare for at få vist et 0;)

Må meget gerne vende tilbage hvis du finder ud af det.

Fomse:-)
Avatar billede korup Nybegynder
29. oktober 2003 - 13:21 #23
Hmm. jeg prøver at se på noget.. vender tilbage senere..

/korup
Avatar billede korup Nybegynder
30. oktober 2003 - 10:47 #24
hej
Du har prøvet at skrive:

IF(ISNULL(SUM(KM),0))

hvor der kun er 1 'i' ik?

/korup
Avatar billede fomse Nybegynder
30. oktober 2003 - 13:31 #25
Jep! Har prøvet det:-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester