Hej! Problemet är väl att du jobbar med strängar och inte DateTime klassen. Om du har denna info lagrad någonstans så bör du lagra både datum och tid. kan inte det ha att göra med midnattsskiftet att göra? det lättaste för att slippa mycket kod kanske är att låta 01:00 bli 25:00? då blir det aldrig midnatt... Hej! Det skulle kunderlätta för dig om du istället användar med fullständiga tidpunkter, datum och tid. Du kan då lättare kontrollera om ett värde är taget dagtid eller natttid. Att göra på något annat sätt anser jag vara fel. Det här med datum tänkte jag inte på, inte undra på att det blev fel. Har nu lagt till datum till tiden och nu funkar jämförelserna.Hjälp med if-sats!
Skulle behöva hjälp med en if-sats som jag håller på att bli tokig på. Säkert väldigt simpel, men det kan vara skönt om någon annan kan kika på den.
Den ska fungera så att jag har ett klockslag(sTid) som jag sedan jämför med när jag la mig(sLaSig) och när jag klev upp(sStegUpp). All tid mellan sLaSig och sStegUpp ska vara nattid, annars är det dagtid.
Har testat några satser men inte fått det att fungera i alla lägen.
Eftersom jag kör med AND just nu måste ju båda villkoren slå in, men det gör det ju inte ibland.
Om vi säger att sTid är 19:00, sLaSig är 00:10 och sStegUpp är 04:00 ska ju det bli dagtid, men det blir det ju inte.
Men det funkar ju om jag lägger mig ex.vis 22:45.
Förslag?
Nuvarande kod:
'Kollar om det är dagtid eller nattid
<code>
If sTid <= sLaSig And sTid >= sStegUpp Then
dSysDag = dSysDag + iTal
dDiaDag = dDiaDag + iTal2
dMedelTryckDag = dMedelTryckDag + iTal3
dPulsFrekvensDag = dPulsFrekvensDag + iTal4
i2 = i2 + 1
Else
dSysNatt = dSysNatt + iTal
dDiaNatt = dDiaNatt + iTal2
dMedelTryckNatt = dMedelTryckNatt + iTal3
dPulsFrekvensNatt = dPulsFrekvensNatt + iTal4
i3 = i3 + 1
End If
</code>
VB 6Sv: Hjälp med if-sats!
Att påstå "I fredags gick jag och lade mig 0200 och på lördagen gick jag upp 0800". Eftersom du inte gick och lade sig i fredags, utan i lördags, så kommer jämförelser med tider under fredagen misslyckas. Om du däremot säger att "min nattsömn mellen fredag och lördag inträffade mellan lör 02 och lör 08" så kan du jämföra med en tid på fredagen ganska enkelt.
Så min rekommendation är att byta lagringsform till koplett datum och tid för din statistik, då kommer allt lösa sig.
/MattiasSv: Hjälp med if-sats!
annars kanske du kan lägga in någon dag-funktion så att det jämför vilket dag det är också? det skulle fylla i princip samma funktion som att låta 1:00 bli 25:00; du låter nästa dag göra 24-timmars-tillägget...
//PontusSv: Hjälp med if-sats!
För att din IF sats ska fungera, så måste du "bifoga" datum så den kan känna av "rätt" (som Mattias skrev).
Om du fortfarande vill använda strängar (tolkar det som strängar då du använder prefixet s framför dina variabler),
tilldela dem datum och tid med funktionen "Now()", och ändra dem till strängar med CStr.
Ex.
<code>
sTid = CStr(Now)
</code>
/HåkanSv: Hjälp med if-sats!
Härr följer ett litet exempel på hur du arbetar med fullständiga tidpunkert(Datatypen date i vb):
<code>
Dim Tid As Date
Dim LaSig As Date
Dim StegUpp As Date
Tid = CDate("2003-5-8 19:00")
LaSig = CDate("2003-5-8 00:10")
LaSig = CDate("2003-5-8 04:00")
Select Case Tid
Case sLaSig To sStegUpp
dSysNatt = dSysNatt + iTal
dDiaNatt = dDiaNatt + iTal2
dMedelTryckNatt = dMedelTryckNatt + iTal3
dPulsFrekvensNatt = dPulsFrekvensNatt + iTal4
i3 = i3 + 1
Case Else
dSysDag = dSysDag + iTal
dDiaDag = dDiaDag + iTal2
dMedelTryckDag = dMedelTryckDag + iTal3
dPulsFrekvensDag = dPulsFrekvensDag + iTal4
i2 = i2 + 1
End Select
</code>
Om du skall skriva ett "bra" program bör du göra det så att det kan hatera att man kan lägga sig över midnatt och flera gånger under ett dygn.
Om du då lagrar under vilka intervaller man lagt sig med fullständig tidpunk. KAn du sammanställa om det värdena är "dag"- eller "natt"-tider direkt i SQL-frågan.
Access SQL:
SELECT *, EXISTS (SELECT Null
FROM SovTid
WHERE Mätvärden.Person = SovTid.Person AND Mätvärden.Tidpunkt BETWEEN SovTid.LaSig AND SovTid.StegUpp ) As
FROM MätvärdenSv: Hjälp med if-sats!
Kul att man får hjälp så snabbt här.
Tack för hjälpen!