Ok, då har du nog förstått rätt, men gjort det krångligt i din lista. ;)
Räkna volym och energi för varje enskild datum
68 svar · 937 visningar · startad av plelkes · sida 3 av 4
Frågan, av plelkes
Just nu ser koden ut <% 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.
Läs frågan i sin helhet →Om jag nu skulle utveckla lite mera = för varje dag har jag även ngra (= ca 3) tidpunkter. Och summeringen skall ske
- efter varje tidpunkt
- varje dag
Jag har gjort lite tillägg (fet-stilt) i ditt pseudokod:
1. Hämta data sorterat efter datum och tid
2. Skapa dagvariabler för volym, energi och "dagen innan"och ”timmen innan”
3. Loopa recordset
4. Kolla om den aktuella dagen är samma som "dagen innan"
5. Om vi är på samma dag gå till 8 om inte gå till 11
**6 .Kolla om den aktuella timmen är samma som ”timmen innan”
7. Om vi är på samma timme gå till 8 om inte gå till 11/
**8. Addera aktuella värden till volym och energi
9. Skriv ut aktuell data
10. Gå till 3
11. Skriv ut volym och energi eftersom dessa tillhör "dagen innan"
12. Nollställ volym och energi och sätt "dagen innan" till aktuell dag
13. Nollställ volym och energi och sätt ”timmen innan” till aktuell timme
14. Addera aktuell volym och energi
15 Skriv ut aktuell data
16. Om fler dagar i recordset gå till 3
17. Om inga fler timmar skriv ut volym och energi
18. Inga fler dagar så skriv ut volym och energi och avsluta
Mina frågor:
har jag ngn logisk sekvens i mina ändringar?****
Mitt försök
<%@ 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, v.tidpunkt 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"
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>
<T><B>Tidpunkten</B></TD>
<TD><B>Vätska</B></TD>
<TD><B>Volym</B></TD>
<TD><B>Energi</B></TD>
</TR>
<%
dat = ""
tp = ""
v = 0
e = 0
Do While Not rs1.EOF
If dat <> CDate(rs1("Dag")) then
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
If tp <> CDate(rs1("tidpunkt")) then
if not tp = "" then
Response.Write "<TR><TD> </TD>"
Response.Write "<TD> </TD>"
Response.Write "<TD><B><U>Volym givet </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
v = cint(rs1("Volym"))
e = cint(rs1("Energi"))
dat = CDate(rs1("Dag"))
tp = CDate(rs1("tidpunkt"))
Response.Write "<TR><TD>" & CDate(rs1("Dag"))& "</TD>"
Response.Write "<TD>" & CDate(rs1("tidpunkt"))& "</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> </TD>"
Response.Write "<TD>" & rs1("FluidNamn") & "</TD>"
Response.Write "<TD>" & rs1("Volym") & "</TD>"
Response.Write "<TD>" & rs1("Energi") & "</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> </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
if not tp = "" then
Response.Write "<TR><TD> </TD>"
Response.Write "<TD> </TD>"
Response.Write "<TD><B><U>Volym givet </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
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
vbalans.Close
Set vbalans = Nothing
%>
<BR><BR><BR>
</TABLE>
</body>
</html>
Slutar i
Microsoft JET Database Engine error '80040e14'
Syntax error (missing operator) in query expression 'v.Energi p.ftEnamn'.
/vatskebalans/visa_rapporten102.asp, line 16
Enligt
query expression 'v.Energi p.ftEnamn'.
så fattas det ett komma mellan dessa variabler i sql-satsen. Ser inte ut så i koden du skickat med men kolla ordentligt.
Torde vara ngt annat fel...
För
strSQL = "SELECT f.FluidNamn, f.FluidID, v.Dag, v.PatID, v.Volym, v.Energi" &_
" p.ftEnamn, p.ftFnamn, v.tidpunkt 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"
ser väl rätt ut??
plelkes skrev:
Torde vara ngt annat fel...
FörstrSQL = "SELECT f.FluidNamn, f.FluidID, v.Dag, v.PatID, v.Volym, v.Energi" &_
" p.ftEnamn, p.ftFnamn, v.tidpunkt 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"ser väl rätt ut??
Nej, det saknas ett komma
strSQL = "SELECT f.FluidNamn, f.FluidID, v.Dag, v.PatID, v.Volym, v.Energi," &_
" p.ftEnamn, p.ftFnamn, v.tidpunkt 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"
tack mrblonde för att du hittade det saknade kommat..
Tyvärr så blev inte resultatet riktigt som jag önskade*snyft*
NI kan själva se om ni kryssar i tex Elvansson
Lusläs din HTML-tabell så du har lika många kolumner på varje rad till att börja med.
Patrik, det skall jag göra hemmifrån se´n
Men tror du att mina ändringar i koden är funkis??
Alltså förutom HTML??
Hinner inte riktigt gå igenom din kod just nu.
Jag tror att du borde dela upp funktionaliteten lite när du bygger. Gör en sak i taget och se att det fungerar. SEN sätter du ihop allt och fixar din layout.
Försök inte göra allt på en gång.
Hoppas du återkommer när du har hunnit kika lite...
PDahlen skrev:
Jag tror att du borde dela upp funktionaliteten lite när du bygger. Gör en sak i taget och se att det fungerar. SEN sätter du ihop allt och fixar din layou
Hur menar du?
Om du vill ha ut värdena för varje timma skriv en loop som gör bara det så du ser att du får ut rätt värden.
Sen har du din tidigare loop som tar ut värdena per dag.
Sen har du din andra tidigare loop som tar ut totalvärden.
När alla tre funkar var för sig kan du börja sätta ihop dem.
Ok - point taken och förstått..
Jag lär behöva mer hjälp. så jag kommer med all säkerhet återkomma
När det gäller din HTML-tabell så gör en dummy på hur du vill att den ska se ut i vanlig HTML.
Då ser du var alla variabler skall hamna.
Mitt försök till pseudokod:
1. Hämta data sorterat efter tidpunkt
2. Skapa variabler för volym, energi och "timmen innan"
3. Loopa recordset
4. Kolla om den aktuella timmen är samma som "timmen innan"
5. Om vi är på samma timme 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 "timmen innan"
10. Nollställ volym och energi och sätt "timmen innan " till aktuell tid
11. Addera aktuell volym och energi
12. Skriv ut aktuell data
13. Om fler timmar i recordset gå till 3
14. Inga fler timmar så skriv ut volym och energi och avsluta.
Har suttit och försökt klura fram:
Som recordsettet är upplagd så är det så att:
- en patinet har en eller flera dagar
- varje dag kan ha en eller flera tidpunkter
Skulle bhöva tipps/förslag på hämtning av data skulle se ut..
Tänk efter lite och gör som jag sa, ta en sak i taget. Gör en lista för att få ut totala variabler, en för dagsvariabler och en för timvariabler.
I din pseudokod ovan, var skapar du dagvariablerna?
Koden för att få ut timvariablerna är exakt samma som dagsvariablerna. Så gör dom separat och sätt sedan ihop dem när de funkar.
PDahlen skrev:
Tänk efter lite och gör som jag sa, ta en sak i taget. Gör en lista för att få ut totala variabler, en för dagsvariabler och en för timvariabler.
I din pseudokod ovan, var skapar du dagvariablerna?
Jag tror att jag har missuppfattat dig... Jag försökte göra som du sa och ta en sak i sänder..
Jag trodde att jag redan hade både dagsvariablerna och totalavariabler??
Totala variabeln var väl det första ajg fick fram? dvs när patientens totalt erhållna volym och energi räknas ut i slutet av tabellen..
Dagsvariablerna - var inte dessa vi höll på med igår?
Därför trodde jag att du menade att nu skulle jag få fram timvariablerna
MIn pseudokod ovan gällde bara timvariablerna..
Ok, jag som missförstod.
Det enda som skiljer dagstotalen och timtotalen är att du skriver ut totalerna oftare. Kodflödet är exakt likadant. Så kopiera dagstotalkoden rakt av och ändra sedan if-frågorna så att de passar för tid.
Så är det bara att köra.
=PDahlen]Kodflödet är exakt likadant. Så kopiera dagstotalkoden rakt av och ändra sedan if-frågorna så att de passar för tid.
Det var min tänkta strategi
Nu har jag gjrit som jag fått rådet (hoppas jag)
- först skrev HTML-koden för en tabell - och det funkar bra
- Så kopiera dagstotalkoden rakt av och ändra sedan if-frågorna så att de passar för tid.
Ändå blev de tinte riktigt som jag tänkt:
<%
tp = ""
v = 0
e = 0
Do While Not rs1.EOF
If tp <> CDate(rs1("tidpunkt")) then
if not tp = "" then
Response.Write "<TR>"
Response.Write "<TD COLSPAN = 3 Align = right >"
Response.Write “<B><U>Givet volym</U></B></TD>”
Response.Write "<TD>" & v & "</TD></TR>"
Response.Write "<TR>"
Response.Write "<TD COLSPAN = 3 Align = right>"
Response.Write "<B><U>Energi</U></B></TD></TD>"
Response.Write "<TD>" & e & "</TD></TR>"
end if
v = cint(rs1("Volym"))
e = cint(rs1("Energi"))
tp = CDate(rs1("Dag"))
Response.Write "<TR><TD>" & CDate(rs1("tidpunkt"))& "</TD>"
Response.Write "<TD>" & rs1("FluidNamn") & "</TD>"
Response.Write "<TD>" & rs1("Volym") & "</TD>"
Else
v = v + cint(rs1("Volym"))
e = e + cint(rs1("Energi"))
Response.Write "<TR><TD> </TD>"
Response.Write "<TD>" & rs1("FluidNamn") & "</TD>"
Response.Write "<TD>" & rs1("Volym") & "</TD>"
End If
rs1.MoveNext
Loop
if not tp = "" then
Response.Write "<TR>"
Response.Write "<TD COLSPAN = 3 Align = right >"
Response.Write “<B><U>Givet volym</U></B></TD>”
Response.Write "<TD>" & v & "</TD></TR>"
Response.Write "<TR>"
Response.Write "<TD COLSPAN = 3 Align = right>"
Response.Write "<B><U>Energi</U></B></TD></TD>"
Response.Write "<TD>" & e & "</TD></TR>"
end if
vbalans.Close
Set vbalans = Nothing
%>
- i själva volym kolumnen skrivs inga siffror ut
- "koden" hittar inte att vi befinner oss i samma timme...
