webForumDet fria alternativet

Poster kommer 2 gånger, problem med if-stats

ASP

12 svar · 203 visningar · startad av Känning

Medlem sedan jan. 2003252 inlägg
Frågan#1

Jag har denna koden och när jag kör den blir det rätt. Men när jag inkluderar filen på en annan sida så blir det inte rätt, då kommer båda posterna.

Det som blir fel är att "if sjudagar >0 then" kommer 2 gånger, alltså den skiter i mitt if

<%
datum = date()
x = 0
sjudagar = 0
do until x = 7
Set conn = Server.CreateObject("ADODB.Connection")
Conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("databasen.mdb")&";"

SQL = "select * from tabell where datum = #" & datum & "# order by ID DESC"

Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open sql, conn, 3, 3

totinsats = 0
totvinst = 0
dagensres = 0

do until rs.eof

totinsats = totinsats + rs("insats")
totvinst = totvinst + rs("vinst")

rs.Movenext
Loop
dagensres = totvinst - totinsats
sjudagar = sjudagar + dagensres
if dagensres >0 then
response.write datum &" "&Round(dagensres,2) &"<br>"
else
%>
<% = date()%>: <font color="#FF0000"><% = Round(dagensres,2) %></font><br>
<%
end if
x = x + 1
datum=datum-1
loop
if sjudagar >0 then
response.Write "Senaste 7 dagarna: "&Round(sjudagar,2)
else
%>
Senaste 7 dagarna: <font color="#FF0000"><% = Round(sjudagar,2) %></font><br>
<%
end if
rs.Close
Conn.Close
%>

Vad säger ni om koden? Jag är rätt ny med asp och detta är det första riktiga projektet som jag håller på med, jag gör en spelsida där jag och några polare bokför hur det går för oss när vi spelar på matcher.

Medlem sedan jan. 2003252 inlägg
#2

Glöm detta, jag hade knarkat till det lite...

Ta gärna bort denna tråden

Medlem sedan jan. 20032 285 inlägg
#3

Skriv ALLTID hur du löste det!

Medlem sedan jan. 2003252 inlägg
#4

Sorry Sebbe, det ska jag komma ihåg att göra.

Jag löste det genom att jag hade kollat helt fel, koden ovan fungerar.

Medlem sedan jan. 2003252 inlägg
#5

Eller rättare sagt, det är ett fel i den, det står <% =date() %> där det borde stå datum istället. Så jag kopierar in den nya koden som jag har uppdaterat lite.

<%
datum = date()
x = 0
sjudagar = 0
do until x = 7
Set conn = Server.CreateObject("ADODB.Connection")
Conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("databas.mdb")&";"

SQL = "select * from tabell where datum = #" & datum & "# order by ID DESC"

Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open sql, conn, 3, 3

totinsats = 0
totvinst = 0
dagensres = 0

do until rs.eof

totinsats = totinsats + rs("insats")
totvinst = totvinst + rs("vinst")

rs.Movenext
Loop
dagensres = totvinst - totinsats
sjudagar = sjudagar + dagensres
if dagensres >0 then
response.write datum&":" &" "&Round(dagensres,2) &"<br>"
else
%>
<% = datum %>: <font color="#FF0000"><% = Round(dagensres,2) %></font><br>
<%
end if
x = x + 1
datum=datum-1
loop
if sjudagar >0 then
response.Write "Senaste 7 dagarna: "&Round(sjudagar,2)
else
%>
Senaste 7 dagarna: <font color="#FF0000"><% = Round(sjudagar,2) %></font><br>
<%
end if
rs.Close
Conn.Close
%>

Medlem sedan jan. 20032 285 inlägg
#6

Ytterligare en sak: Anropa aldrig ett objekt i en loop när du stönger objektet utanför loopen! Lägg

Set conn = Server.CreateObject("ADODB.Connection") 
Conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("databas.mdb")&";"

innan loopen! Och sedan, om du vill göra det lite snabbare till kan du byta ut

Conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("databas.mdb")&";"

till

Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("databas.mdb")

Läs mer på https://www.connectionstrings.com :)

Medlem sedan jan. 2003252 inlägg
#7

Tackar :)

En annan grej som du kanske skulle kunna hjälpa mig med:

Jag skriver ju ut om vi gör ett minusresultat med rött istället, jag vet inte hur man skriver det i koden så jag var tvungen att lägga det utanför.

Du kanske skulle kunna tipsa mig om hur man gör?

Medlem sedan jan. 20032 285 inlägg
#8

Du använder

Response.Write("Senaste 7 dagarna: <font color=""#FF0000"">" & Round(sjudagar,2) & "</font><br>")

:)

Medlem sedan jan. 2003252 inlägg
#9

Man tackar

:)

Medlem sedan jan. 20032 285 inlägg
#10

Lite optimering av koden :)

<% 
dtmDatum = Date()

Set objCon = Server.CreateObject("ADODB.Connection") 
objCon.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("databas.mdb") 

strSQL = "SELECT * FROM tabell WHERE datum Between #" & dtmDatum & "# AND #" & DateAdd("d",-7,Date) & "# ORDER BY datum DESC" 

Set objRS = Server.CreateObject("ADODB.Recordset") 
objRS.Open strSQL, objCon, 3, 3 

Do Until objRS.EOF
  intResultat = objRS("vinst") - objRS("insats")
  If intResultat > 0 Then 
    Response.Write(objRS("datum") & ": " & Round(intResultat,2) & "<br>")
  Else 
    Response.Write(objRS("datum") & ": <font color=""#FF0000"">" & Round(intResultat,2) & "</font><br>")
  End If
  objRS.MoveNext
Loop
objRS.MoveFirst

Do Until objRS.EOF
  intSenaste = intSenaste + (objRS("vinst") - objRS("insats"))
  objRS.MoveNext
Loop

If intSenaste > 0 Then 
  Response.Write("Senaste 7 dagarna: " & Round(intSenaste,2))
Else 
  Response.Write("Senaste 7 dagarna: <font color=""#FF0000"">" & Round(intSenaste,2) & "</font><br>") 
End If

objRS.Close
Set objRS = Nothing
objCon.Close
Set objCon = Nothing
%>
Medlem sedan dec. 200012 464 inlägg
#11

Du gör ju väldigt mycket i onödan, hantera alla beräkningar i SQL istället.

<%
Set conn = Server.CreateObject("ADODB.Connection")
Conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("databasen.mdb")&";"

SQL = "select datum , sum(insats),sum(vinst) from tabell where datum > date() -7 group by datum order by datum DESC"
set rs = conn.execute(sql)

sjudagar = 0
do until rs.eof
   dagensres = rs(2) - rs(1)
   sjudagar = sjudagar + dagensres
   response.write rs(0)
   if dagensres <= 0 then response.write "<font color='#FF0000'>"
   response.write Round(dagensres,2) 
   if dagensres <= 0 then response.write "</font>"
   response.write "<br>"
loop
response.Write "Senaste 7 dagarna: "
if sjudagar <= 0 then response.write "<font color='#FF0000'>"
response.write Round(sjudagars,2)
if sjudagar <= 0 then response.write "</font>"
response.write "<br>"
rs.Close
Conn.Close
%>
Medlem sedan jan. 2003252 inlägg
#12

Men det är ju så det ska se ut :)

tackar igen

Medlem sedan jan. 20032 285 inlägg
#13

Jo, LarsG's metod var ju lite smidigare, som du tydligen såg. :)

265 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)