---
title: "Räkna volym och energi för varje enskild datum"
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/102837-räkna-volym-och-energi-för-varje-enskild-datum/page2"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "plelkes"
published: "2004-05-03T16:40:46.000Z"
updated: "2004-05-14T11:34:09.000Z"
replies: 68
views: 953
page: 2
pages: 4
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/102837-räkna-volym-och-energi-för-varje-enskild-datum"
---

# Räkna volym och energi för varje enskild datum

_Sida 2 av 4._

## #21 — PDahlen, 2004-05-04T17:33Z

Korrigering.
Ser att du missat i din utskrift.

```
                        Response.Write "<TR><TD> </TD>"
			Response.Write "<TD> </TD>"
			Response.Write "<TD><B><U>Volym givet idag:</U></B></TD>"
			Response.Write "<TD>" & v & "</TD></TR>"
			Response.Write "<TR><TD> </TD>"
			Response.Write "<TD> </TD>"
			Response.Write "<TD><B><U>Givet energi</U></B></TD>"
			Response.Write "<TD>" & e & "</TD></TR>"
```

Ska det vara. Du hade inte TD cellerna rätt.

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

## #22 — plelkes, 2004-05-04T17:50Z

Rikard, jag försökte skriva pseudokod,men misslyckats!

Men det stämmer fortfarande inte helt med din kod...
[prova själv](http://www12.brinkster.com/vatskebalans/count.asp)  och kryssa i tex Elvansson..
då ser du 

1. "tabellen" ser konstigt ut
2. för sista posten skrivs inte summeringen ut
3. datumen kommer i oordning

Koden ser ut som följer:

```
<%@ Language=VBScript LCID=1053%>
<HTML>
<title>Rapport</title>
<BODY>
 <%
pat = Request.Form("rapport")
Set vbalans = Server.CreateObject("ADODB.Connection")
vbalans.Provider = "Microsoft.Jet.OLEDB.4.0"
MdbFilePath = Server.MapPath("\vatskebalans\db\vbalans.mdb")
vbalans.ConnectionString = "Data Source='" & MdbFilePath & "'"
vbalans.open
strSQL = "SELECT f.FluidNamn, f.FluidID, v.Dag, v.PatID, v.Volym, v.Energi," &_
         " p.ftEnamn, p.ftFnamn FROM (tblVetskebalans v INNER JOIN tblFluids f"&_
          " ON v.FluidID = f.FluidID) INNER JOIN tblPersonuppgifter p ON v.PatID = p.PatID" &_
          " WHERE p.PatID = "& pat &""
		  Set rs1 = vbalans.Execute (strSQL)
'formatera till svensk personnummer
Function SvPnr(txt)
      personnummer =Left(txt,6) & " - " & Right(txt,4)
  SvPnr = personnummer
End Function
Function FirstVersal(txt)
      versal = UCase(Left(txt,1)) & LCase(Right(txt, Len(txt)-1))
  FirstVersal = versal
End Function
    Response.Write SvPnr(rs1("PatID")) & "<BR>"
    Response.Write "<B>" & FirstVersal(rs1("ftEnamn")) & ", " & FirstVersal(rs1("ftFnamn")) & "</B><P><P><P>"
%>
<TABLE border=1>
  <TR>
    <TD><B>Datum</B></TD>
    <TD><B>Vätska</B></TD>
    <TD><B>Volym</B></TD>
    <TD><B>Energi</B></TD>
   </TR>
<%
dat = "" 
v = 0
e = 0
Response.Write "<table>"
Do While Not rs1.EOF
	If dat <> CDate(rs1("Dag")) then
		if not dat = "" then
			Response.Write "<TR><TD>&nbsp; </TD>"
			Response.Write "<TD>&nbsp;</TD>"
			Response.Write "<TD><B><U>Volym givet idag:</U></B></TD>"
			Response.Write "<TD>" & v & "</TD></TR>"
			Response.Write "<TR><TD>&nbsp;</TD>"
			Response.Write "<TD>&nbsp;</TD>"
			Response.Write "<TD><B><U>Givet energi</U></B></TD>"
			Response.Write "<TD>" & e & "</TD></TR>"
		end if
		v = cint(rs1("Volym"))
		e = cint(rs1("Energi"))
		dat = CDate(rs1("Dag")) 
		Response.Write "<TR><TD>" & CDate(rs1("Dag"))& "</TD>"
		Response.Write "<TD>" & rs1("FluidNamn") & "</TD>"
		Response.Write "<TD>" & rs1("Volym") & "</TD>"
		Response.Write "<TD>" & rs1("Energi") & "</TD></TR>"
	Else
		v = v + cint(rs1("Volym"))
		e = e + cint(rs1("Energi"))
		Response.Write "<TR><TD>&nbsp;</TD>"
		Response.Write "<TD>" & rs1("FluidNamn") & "</TD>"
		Response.Write "<TD>" & rs1("Volym") & "</TD>"
		Response.Write "<TD>" & rs1("Energi") & "</TD></TR>"
	End If
rs1.MoveNext
Loop

vbalans.Close
Set vbalans = Nothing
%>
<BR><BR><BR>
</TABLE>

</body>
</html>
```

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

## #23 — PDahlen, 2004-05-04T17:59Z

1\. Om du hade gjort som jag sa och kollat sourcen hade du sett att det även låg en \<table\> för mycket. Jag visste ju inte hur din kod såg ut när jag gav mitt förslag. Läs alltid koden och kolla så att den passar i ditt sammanhang.
Lösning: ta bort raden
   Response.Write "\<table\>"
som finns direkt efter första e= 0

2\. Efter Loop lägg till

```
if not dat = "" then
  Response.Write "<TR><TD>  </TD>"
  Response.Write "<TD> </TD>"
  Response.Write "<TD><B><U>Volym givet idag:</U></B></TD>"
  Response.Write "<TD>" & v & "</TD></TR>"
  Response.Write "<TR><TD> </TD>"
  Response.Write "<TD> </TD>"
  Response.Write "<TD><B><U>Givet energi</U></B></TD>"
  Response.Write "<TD>" & e & "</TD></TR>"
end if
```

3\. Om du ska ha rätt datumordning måste du sortera din SQL-fråga efter datum. Lägg till
  ORDER BY v.dag
sist i din SQL-fråga.

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

## #24 — plelkes, 2004-05-04T18:03Z

Men du har redan

```
if not dat = "" then
  Response.Write "<TR><TD>  </TD>"
  Response.Write "<TD> </TD>"
  Response.Write "<TD><B><U>Volym givet idag:</U></B></TD>"
  Response.Write "<TD>" & v & "</TD></TR>"
  Response.Write "<TR><TD> </TD>"
  Response.Write "<TD> </TD>"
  Response.Write "<TD><B><U>Givet energi</U></B></TD>"
  Response.Write "<TD>" & e & "</TD></TR>"
end if
```

 högre upp i hirarkin

1. varför skall det stådär uppe innan ens "dagens vätskor "skrivs ut?
2. varför skriva samma kod efter loopen?

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

## #25 — plelkes, 2004-05-04T18:16Z

> **PDahlen skrev:**
>
> Om du ska ha rätt datumordning måste du sortera din SQL-fråga efter datum. Lägg till
> ORDER BY v.dag
> sist i din SQL-fråga

 fungerade tyvärr inte

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

## #26 — PDahlen, 2004-05-04T18:23Z

Hur ser din SQL-fråga ut nu då?

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

## #27 — plelkes, 2004-05-04T18:24Z

```
strSQL = "SELECT f.FluidNamn, f.FluidID, v.Dag, v.PatID, v.Volym, v.Energi," &_
         " p.ftEnamn, p.ftFnamn FROM (tblVetskebalans v INNER JOIN tblFluids f"&_
          " ON v.FluidID = f.FluidID) INNER JOIN tblPersonuppgifter p ON v.PatID = p.PatID" &_
          " WHERE p.PatID = "& pat &" ORDER BY v.dag"
```

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

## #28 — PDahlen, 2004-05-04T18:25Z

Är v.Dag verkligen ett datum, annars funkar inte sorteringen?
Jag kollade din sida igen och datumen är sorterade men det blir ändå någon konstig sortering.

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

## #29 — plelkes, 2004-05-04T18:28Z

> Är v.Dag verkligen ett datum

 Menar du vilken fält det är? i så fall är det av typen text... annars fick jag ej till vissa tidigare villkor

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

## #30 — PDahlen, 2004-05-04T18:32Z

Ok, där har du problemet. Eftersom fältet inte är datum så sorteras det inte på rätt sätt. Det sorteras som en sträng istället för ett datum.

Släng in en fråga i SQL-forumet om det går att konvertera text-fältet till datum i ORDER BY.
Så kan vi lämna den här tråden nu. ;)

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

## #31 — plelkes, 2004-05-04T18:34Z

Men du Patrik, jag är fortfarande stum av beundran för din kod.
Och för att vara ärlig så förstår jag inte hur/varför koden funkar.
Kan du berätta hur du har tänkt?

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

## #32 — PDahlen, 2004-05-04T18:43Z

Inget speciellt egentligen när man tänker programmatiskt. Jag har tänkt logiskt helt enkelt. ;)

Det vanligaste misstaget är nog att man tror att det är mer komplicerat än vad det är.
Det första man kan göra är att rita upp ett flödesdiagram. Särskilt om det är större saker man ska göra.

Så här skulle pseudokoden sett ut:

1\. Hämta data sorterat efter datum
2\. Skapa dagvariabler för volym, energi och "dagen innan"
3\. Loopa recordset
4\. Kolla om den aktuella dagen är samma som "dagen innan"
5\. Om vi är på samma dag gå till 6 om inte gå till 9
6\. Addera aktuella värden till volym och energi
7\. Skriv ut aktuell data
8\. Gå till 3
9\. Skriv ut volym och energi eftersom dessa tillhör "dagen innan"
10\. Nollställ volym och energi och sätt "dagen innan" till aktuell dag
11\. Addera aktuell volym och energi
12\. Skriv ut aktuell data
13\. Om fler dagar i recordset gå till 3
14\. Inga fler dagar så skriv ut volym och energi och avsluta.

När det gäller problemen du fick med utskriften så var det HTML-fel. Om du ska skriva ut komplicerade tabeller så gör en vanlig HTML-tabell först med den struktur du vill ha innan du stoppar in den i ASP-koden. När man sätter response.write runt HTML-koden så är det svårare att felsöka.

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

## #33 — plelkes, 2004-05-04T18:56Z

Det jag har problem med att förstå är ffa kodens

```
if not dat = "" then
  Response.Write "<TR><TD>  </TD>"
  Response.Write "<TD> </TD>"
  Response.Write "<TD><B><U>Volym givet idag:</U></B></TD>"
  Response.Write "<TD>" & v & "</TD></TR>"
  Response.Write "<TR><TD> </TD>"
  Response.Write "<TD> </TD>"
  Response.Write "<TD><B><U>Givet energi</U></B></TD>"
  Response.Write "<TD>" & e & "</TD></TR>"
end if
```

 placering.
Varför just där?
Om jag fattar rättbetyder väl koden:
om datum inte är tom så skriv ut e & v?

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

## #34 — PDahlen, 2004-05-04T19:00Z

Anledningen att jag lägger den där är för att när du kommer in i loopen första gången så är dat="". Om du inte har IF-satsen så kommer det göras en utskrift och då är v och e fortfarande 0.
Prova att ta bort 
if not dat = "" then
end if
och bara ha själva utskriften så ser du att du får en rad innan alla riktiga värden.

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

## #35 — PDahlen, 2004-05-04T19:01Z

Tillägg:
Och anledningen till att den ligger just där är för att det är där du hamnar om aktuell dag INTE är samma som dagen innan. Och om vi har gått till nästa dag så vill vi skriva ut volym och energi för "dagen innan" innan vi börjar räkna volym och energi för aktuell dag.

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

## #36 — plelkes, 2004-05-04T19:19Z

Nu fattar jag om möjligt ännu mindre...
Visst är det så att innan jag går vidare till dag 2 i rs1 så vill jag skriva ut dag1´s v & e - så långt är jag med...

```
dat = ""
```

 betyder väl att recsettet är tomt? dvs dagen innan vi börjar?
Hur får du då det till ( för du lyckas ju uppenbarligen) att )

```
if not dat =""
```

 betyder "dagen innan"??
Och 

```
If dat <> CDate(rs1("Dag")) then
        Else
End If
```

 är inte det samma sak som )

```
if not dat =""
```

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

## #37 — PDahlen, 2004-05-04T19:36Z

Detta är själva kollen för att se om vi är på samma dag.

```
If dat <> CDate(rs1("Dag")) then
        Else
End If
```

När du kommer in i loopen första gången så är dat = "" och rs1("Dag") är ett datum. Det innebär att koden tolkar det som att vi har kommit till en ny dag. Eftersom en ny dag innebär att volym och energi ska skrivas ut så måste vi göra en extra koll. Eftersom vi vet att dat = "" när loopen påbörjas använder vi

```
if not dat ="" then
```

Vad den extra if-satsen gör är att om dat = "", som betyder att vi är inne på första dagen, skriver vi inget. Eftersom vi är på första dagen så finns ju ingen "dagen innan", med andra ord inga värden att skriva ut.

Det går även att sätta dat = rs1("Dag") innan man går in i loopen istället för den extra if-satsen. Det ger samma resultat.

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

## #38 — plelkes, 2004-05-05T06:24Z

Tack Patrik - du är en pärla :bire 
MEN bara för att kolla att jag har fattat rätt:
1)	kolla om samma dag
2)	Om första dagen:tilldela,skriv ut
3)	Nästa post i recordsettet
4)	Om samma dag: summera, skriv ut allt utom datumet
5)	Loopa tills recordsettet slut
6)	Kolla nästa dag
7)	Om ny dag – kolla om det finns en dag innan
8)	Om ja –skriv ut summa v och summa e
9)	Om nej – gör inget
10)	 Upprepa från pkt 2 och frammåt

Gör detta tills alla poster i kolumn rs1(”Dag”) är kollade
11) när vi har kommit till sista posten i rs1(”Dag”): skriv ut summan av v & e

Stämmer?

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

## #39 — PDahlen, 2004-05-05T06:31Z

Nej, fel på 2. Om första dagen skriv INTE ut.
Fel på 9. Om inte ny dag, summera. Punkt 4.
Fel på 10. Upprepa från punkt 1 i din lista.

Du har gjort det väldigt rörigt och har ingen logisk sekvens längre. Kolla min lista igen istället.

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

## #40 — plelkes, 2004-05-05T06:38Z

Nja, jag tror att vi har missuppfattat varandra:
Med 2 menar jag:
  skriv ut Vätska,Volym,energi
Med 9 :
om inte en ny dag så skriv inte ut summan

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

---

Tråden på webben: https://www.webforum.nu/amne/asp/102837-räkna-volym-och-energi-för-varje-enskild-datum/page2  
Föregående sida: https://www.webforum.nu/amne/asp/102837-räkna-volym-och-energi-för-varje-enskild-datum.md  
Nästa sida: https://www.webforum.nu/amne/asp/102837-räkna-volym-och-energi-för-varje-enskild-datum/page3.md
