Ok.
Mer info hit och du får nog mer info tillbaka. ;)
Annars är väl första frågan: Hur ser sql-strängen ut när du printar ut den samt hur exekverar du den?
20 svar · 702 visningar · startad av webbSAJTEN
Detta script skall sätta personen Online
strStatus = "Online"
SQL = "UPDATE anv Set strStatus = '"&strStatus&"' Where ID = "&session("ID")&""
Connect.Execute(SQL),,128
Den har fungerat hela tiden, till nu :S
Ok.
Mer info hit och du får nog mer info tillbaka. ;)
Annars är väl första frågan: Hur ser sql-strängen ut när du printar ut den samt hur exekverar du den?
Alltså..
Får inte ut satsen.. Får bara en massa felmess :S
Men jag tänkte, denna kod finns på en includerad sida..
strStatus = "Offline"
SQL = "UPDATE anv Set strStatus = '"&strStatus&"' Where '"&DateAdd("n", -15, Now())&"' < strSenast "
Connect.Execute(SQL),,128
Kan de vara den som sätter personen Offline direkt?
Antar att du har en sats som uppdaterar strSenast innan ovanstående funktioner.
Dina massa felmess är lite svåra att tyda härifrån dessutom.
Egentligen räcker det med din uppdatering av strSenast.
Sedan har du ytterligare en fråga som tar ut de som uppdaterat sidan de senaste 15 minuterna.
Menar du att den sätter alla som varit aktivs dom senaste 15 minutrarna kommer Offline?
Tror du vill att
SQL = "UPDATE anv Set strStatus = '"&strStatus&"' Where '"&DateAdd("n", -15, Now())&"' < strSenast "
ska vara
SQL = "UPDATE anv Set strStatus = '"&strStatus&"' Where '"&DateAdd("n", -15, Now())&"' > strSenast "
för att sätta alla som inte uppdatera senaste 15 minuterna till offline.
Måste nog vara de som är felet :D
Vänligen markera rätt svar som lösningen. För sakens skull :)
Men har märkt nu att den koden fungerar inte som de ska..
En person i databasen har strSenast. 2005-10-02 11:03:01
Och då skall den personen sättas som Offline, men det gör han inte..
strStatus = "Offline"
SQL = "UPDATE anv Set strStatus = '"&strStatus&"' Where '"&DateAdd("n", -15, Now())&"' > strSenast "
Connect.Execute(SQL),,128
Fan, du är kung =)..
Eller hmm.. :P
UPDATE anv Set strStatus = 'Offline' Where strSenast < '10/2/2005 7:31:37 PM'
Sådär får jag ut de ;) Alltså i fel format.. :(
Hur ändrar ja så att datumet visas klokt?..
Antar att du använder Access? I så fall ska datum alltid omges av # och inte '.
UPDATE anv Set strStatus = 'Offline' Where strSenast < #10/2/2005 7:31:37 PM#
En liten undran bara, om status kan vara antingen Offline eller Online, varför inte använda en boolean till det?
...och du har vänt tillbaka jämförelseoperatorn igen f.ö.
Det är dessutom en valid presentation av datetime.
Jag använder MySQL, och jag har inte vänt tillbaka den.. Den är som cyprys (du) vill att den ska vara..
Och du Baltiz, boolean.. kan du förklara mer?
Jag använder MySQL, och jag har inte vänt tillbaka den.. Den är som cyprys (du) vill att den ska vara..
Jämför min senaste och din senaste kod och säg om det där. ;)
Boolean är ett uttryck som endast kan ha två värden. True eller false. Brukar även representeras som 1 (true) 0 (false). Istället för att ha långa strängar som tar plats och göra strängoperationer/jämförelser varje gång man ska hämta ut de som är Online resp Offline låter man 1 stå för online och 0 för offline. Databasen blir alltså mindre och går snabbare med boolean.
I mySQL får du använda t.ex. tinyint för att respresentera boolean då det inte stöds.
Okej! Nu är de såhär..
När jag har kodsnutten såhär
SQL = "UPDATE anv Set strStatus = '"&strStatus&"' Where strSenast > '"&DateAdd("n", -15, Now())&"'"
Så är det ingen som hamnar Online när man loggar in.
När snutten är såhär:
SQL = "UPDATE anv Set strStatus = '"&strStatus&"' Where strSenast < '"&DateAdd("n", -15, Now())&"'"
då sätts man som Online, men man sätts inte som Offline efter 15 minuter..
All relevant kod ser ut såhär..
<script>
setTimeout("location.href='settings.asp?set=offline'", 899999);
</script>
<%
Set Connect = Server.CreateObject("Adodb.Connection")
Connect.Open strCon
if request.QueryString("set") = "offline" then
strStatus = "Offline"
SQL = "UPDATE anv Set strStatus = '"&strStatus&"' Where ID = "&session("ID")&""
Connect.Execute(SQL),,128
session.Abandon()
Response.Redirect("index.asp")
end if
strStatus = "Offline"
SQL = "UPDATE anv Set strStatus = '"&strStatus&"' Where strSenast > '"&DateAdd("n", -15, Now())&"'"
'response.Write SQL
Connect.Execute(SQL),,128
SQL = "UPDATE anv Set strSenast = current_timestamp Where ID = "&session("ID")&""
Connect.Execute(SQL),,128
webbSAJTEN skrev:
Okej! Nu är de såhär..
Så är det ingen som hamnar Online när man loggar in.
Det är upp till inloggningsfunktionen att sätta status till "Online", och alla andra sidor måste sätta strSenast, hela tiden (lite konfunderande med kolumnnamnet "strSenast", det är ju ingen sträng)
webbSAJTEN skrev:
När snutten är såhär:
SQL = "UPDATE anv Set strStatus = '"&strStatus&"' Where strSenast < '"&DateAdd("n", -15, Now())&"'"då sätts man som Online, men man sätts inte som Offline efter 15 minuter..
Jo, det blir man nog, men inte förrän någon låter webbläsaren stå still i 899999 millisekunder, eller triggas funktionen av någon annan sida också?
Använd gärna databasmotorns inbyggda datumfunktioner, så blir det problemfritt och lättare att läsa.
UPDATE anv Set strStatus = 'Offline' Where strStatus='Online' AND strSenast < DATE_SUB(NOW(),INTERVAL 15 MINUTE)
När jag la in snutten
UPDATE anv Set strStatus = 'Offline' Where strStatus='Online' AND strSenast < DATE_SUB(NOW(),INTERVAL 15 MINUTE)
så verkarde allt funka :D Ska se ett tag om de funkar :D