Avatar billede bjarke-b Nybegynder
22. februar 2001 - 11:18 Der er 14 kommentarer og
2 løsninger

Opdater brugere

Jeg er igang med en chat der kører på en access db, jeg har en tabel der hedder online der indeholder navn, tid.
Tid indeholder seneste tidspunkt for hvornår de har opdateret.....jeg skal så
smide dem af hvis de ikke har opdateret i 20 sekunder.
jeg har prøvet med dette:

Set Conn = Server.CreateObject(\"ADODB.Connection\")
Conn.Open \"PROVIDER=MSDASQL;DRIVER={Microsoft Access Driver (*.mdb)};DBQ=\" & Server.MapPath(\"chatten.mdb\") & \"\"
Set rs = Server.CreateObject(\"ADODB.RecordSet\")
strSQL = \"Select * From online\"
rs.Open strSQL, Conn, 1, 3

Do until rs.eof

    if datediff(\"s\", Now, rs(\"time\")) > 20 then
    rs.delete
    end if

rs.movenext
Loop
rs.Close
Set rs = Nothing
Conn.Close
set Conn = Nothing

Men det virker åbenbart ikke

Nogen der har en ide ?
Avatar billede kasseper Nybegynder
22. februar 2001 - 11:30 #1
er det ikke lidt \'tungt\' at gemme online brugere i en base, du har jo session variabler du kan bruge...
Der er endda Session.timeout der kan sættes til hvad du vil, så du kan smide dem af efter et interval....
Avatar billede bjarke-b Nybegynder
22. februar 2001 - 11:32 #2
well, det er det nok......men prøver nu alligevel......
Avatar billede teepee Nybegynder
22. februar 2001 - 11:47 #3
Personligt ville jeg nok sætte tolerancen op til nogle minutter i det mindste, men der er faktisk gode grunde til at benytte et \"hjemmelavet\" system hvis løsningen skal skalere ordentligt, da sessionen ikke kan deles på tværs at flere servere.

bjarke-b, hvorfor skyder du ikke bare følgende af mod basen:

delete from online
where time < now()-20

eller hvad det hedder i access, når man skal trække 20 sekunder fra nu

Du behøver da ikke loope dem igennem.
Avatar billede kasseper Nybegynder
22. februar 2001 - 11:55 #4
teepee >> \'da sessionen ikke kan deles på tværs at flere servere.\' ????????????????????????????????
Avatar billede bjarke-b Nybegynder
22. februar 2001 - 11:57 #5
teepee -> Nej, jeg har lavet det sådan at listen med online brugere opdaterer hvert 10 sekund, så hvert 10 sekund bliver tidsfeltet opdateret.

Prøver lige med det du skrev
Avatar billede bjarke-b Nybegynder
22. februar 2001 - 12:04 #6
teepee -> Damn, kan ikke få det til og funke kom lige med et eksempel på hvad du mener
Avatar billede cyigen Nybegynder
22. februar 2001 - 12:12 #7
Set Conn = Server.CreateObject(\"ADODB.Connection\")
Conn.Open \"PROVIDER=MSDASQL;DRIVER={Microsoft Access Driver (*.mdb)};DBQ=\" & Server.MapPath(\"chatten.mdb\") & \"\"
strSQL = \"Select * From online\"
set rs = conn.Execute(strSQL)

Do While not rs.EOF

if datediff(\"s\", Now, rs(\"time\")) > 20 then

strSQL = \"Select * From online WHERE id = \" & rs(\"id\")
Set rs = Server.CreateObject(\"ADODB.RecordSet\")
rs.Open strSQL, Conn, 1, 3
rs.delete
rs.Close

end If

rs.movenext
Loop
set rs = Nothing
Conn.Close
set Conn = Nothing
Avatar billede cyigen Nybegynder
22. februar 2001 - 12:15 #8
Ny version, ikke testet

Set Conn = Server.CreateObject(\"ADODB.Connection\")
Conn.Open \"PROVIDER=MSDASQL;DRIVER={Microsoft Access Driver (*.mdb)};DBQ=\" & Server.MapPath(\"chatten.mdb\") & \"\"
strSQL = \"Select * From online\"
set rs = conn.Execute(strSQL)

Do While not rs.EOF

if datediff(\"s\", Now, rs(\"time\")) > 20 then

strSQL = \"DELETE From online WHERE id = \" & rs(\"id\")
conn.Execute(strSQL)

end If

rs.movenext
Loop
set rs = Nothing
Conn.Close
set Conn = Nothing
Avatar billede bjarke-b Nybegynder
22. februar 2001 - 12:28 #9
Det virker ikke helt....
Avatar billede teepee Nybegynder
22. februar 2001 - 12:49 #10
Kasseper => Det er da rart at kode noget der kan klare en  distribueret løsning, når nu at bjarke-b har så meget success at han skal bruge mere end en webserver, men stadig én databaseserver.

To trin: Trin (1) slet de gamle ved at skyde min \"delete from\" af. (2) Dernæst kan du lave en almindelig select hvor du ved at alle er online!

Hvad mener du med eksempel, koden står i mit svar.
Du skal ikke ind i noget loop. Du sletter alle gamle på én gang.
Avatar billede kasseper Nybegynder
22. februar 2001 - 12:54 #11
teepee >> Jeg er stået af....Sessions ligger jo på webserv. og han vil forhåbentlig ikke lægge sin app. på flere webservere....!
Avatar billede teepee Nybegynder
22. februar 2001 - 13:00 #12
Nej, ikke fra starten af, men for alle løsninger, gælder det om at have en optimistisk tilgang til det forventede resultat. Og IIS kan ikke dele sessionvariable på tværs af flere webservere som spejler hinanden. Hvilket vil sige at man ikke kan fordele workload over flere webservere da en bruger bliver stavnsbundet til en bestemt server når man logger in.
Avatar billede kasseper Nybegynder
22. februar 2001 - 13:09 #13
Ja Ja, men nu snakker vi jo om et, som du selv sagde \"hjemmelavet\" system. Det lader ikke til at det skal struktureres efter sådanne resourceafhængigheder.
Generelt vil jeg da give dig ret i at man bør være meget opmærksom på belastningerne, men at dele en chat session op på flere servere, vil da i den grad være overKill.
Avatar billede soerens Nybegynder
23. februar 2001 - 11:04 #14
En vigtig ting teepee vist glemmer er at Session Vars ikke fungerer, hvis brugerens browser har cookies disabled...

Den er næsten vigtigere end at Sessions ikke har det så godt i f.eks. en Web Farm (flere servere, der hoster den samme site;-)

Det var bare lige det jeg ville sige, hej.

/SørenS.
Avatar billede teepee Nybegynder
23. februar 2001 - 11:18 #15
Endnu en (god) pointe for ikke at bruge IIS egne sessionsvariable
Avatar billede bjarke-b Nybegynder
23. februar 2001 - 14:39 #16
fandt selv ud af noget så i deler pointne
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester