27. oktober 2003 - 09:50Der 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?
' 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> " & Rs("km") & "<br>" rs.movenext loop printRs = strPrint End Function
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>
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)
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?
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
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
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å:-)
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.
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.