Hallo, ik heb een probleem(pje). Ik heb een MS access database en nu wil ik een gebruikerslog van de mensen die inloggen, bijhouden. Ik ben al zover dat wanneer iemand inlogt, dat zijn naam/inlogtijd in een tabel worden bijgeschreven. Nu wil ik echter ook nog dat als iemand uitlogt, de datum/tijd van uitloggen en de totale inlogtijd in minuten (in hetzelfde record) worden bijgeschreven.
Gegevens tabel:
tblUserloggedIn met daarin de volgende fields:
strUsername
strEchtenaam
strTime
strTimeOut
strMinutesLoggedIn
Alle bovenstaande fields zijn tekst gebaseerd.
Als een user inlogt wordt de volgende public sub uitgevoerd:
Waarbij opgemerkt moet worden dat username2 een public variant is die zijn waarde krijgt op het moment dat de gebruiker inlogt.
Nu dacht ik om de volgende public sub toe te passen om er voor te zorgen dat in het gebruikerslog de tijd van uitloggen komt, maar op de één of andere manier krijg ik het niet voor elkaar. De public sub AddUserLog wordt uitgevoerd op het moment dat de gebruiker uitlogt, dat weet ik zeker. Toch komen er geen uitlogtijd en aantal minuten ingelogd in de tabel tblUsersLoggedIn te staan. Wat doe ik fout?
Sterker nog, bij bovenstaande code slaat het programma vast. Ik loop hier al drie dagen mee te klooien, dus enige hulp wordt zeer gewaardeerd.
Alvast bedankt!
Edit: Stel dat een gebruiker de database aflsuit via de taskmanager (dus niet via de weg die ik voor hem heb uitgestippeld), dan staat zijn username de volgende keer dat hij inlogt, twee keer in de lijst. Ik vind het niet erg als in beide records dan dezelfde uitlogtijd komt te staan. Maar mocht je een manier weten om bij het oudste record (dus met de oudste logintijd) de tekst "Verkeerd uitgelogd" neer te zetten en bij de nieuwste record wél de juiste uitlogtijd, zou dat helemaal geweldig zijn.
Gegevens tabel:
tblUserloggedIn met daarin de volgende fields:
strUsername
strEchtenaam
strTime
strTimeOut
strMinutesLoggedIn
Alle bovenstaande fields zijn tekst gebaseerd.
Als een user inlogt wordt de volgende public sub uitgevoerd:
Code:
Public Sub AddUserInList()
Dim dbs As Database
Dim rst As Recordset
Dim strEchteNaam As Variant
Dim strTime As Variant
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("tblUsersloggedin", dbOpenDynaset)
strEchteNaam = DLookup("[strEchteNaam]", "tblOverview", "[strUsername] = '" & Username2 & "'")
strUsername = Username2
strTime = Format(Now, "dd mmm yyyy hh:mm:ss")
AddNewUserInList rst, strUsername, strEchteNaam, strTime
End Sub
______________________________________________________________________________________________________
Function AddNewUserInList(rstTemp As Recordset, strUsername, strEchteNaam As Variant, strTime As Variant)
With rstTemp
.Addnew
!strUsername = strUsername
!strNaam = strEchteNaam
!strTime = strTime
!strTimeOut = Null
.Update
.Bookmark = .LastModified
End With
End Function
Nu dacht ik om de volgende public sub toe te passen om er voor te zorgen dat in het gebruikerslog de tijd van uitloggen komt, maar op de één of andere manier krijg ik het niet voor elkaar. De public sub AddUserLog wordt uitgevoerd op het moment dat de gebruiker uitlogt, dat weet ik zeker. Toch komen er geen uitlogtijd en aantal minuten ingelogd in de tabel tblUsersLoggedIn te staan. Wat doe ik fout?
Code:
Public Sub AddUserLog()
Dim dbs As Database
Dim rst As Recordset
Dim UsernameCheck, TimeOut, TimeOutCheck, MinutesLoggedIn, Time, Naam As Variant
Dim strTime, strNaam, strTimeOut, StrMinutesLoggedIn As Field
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("tblUsersloggedin", dbOpenDynaset)
TimeOut = Format(Now, "dd mmm yyyy hh:mm:ss")
Time = rst.Fields("strTime")
TimeOutCheck = rst.Fields("StrTimeOut")
UsernameCheck = rst.Fields("StrUsername")
MinutesLoggedIn = DateDiff("n", Time, Now)
rst.MoveFirst
rst.MoveLast
rst.MoveFirst
Do While rst.EOF = False
If UsernameCheck = Username2 And (IsNull(TimeOutCheck) Or TimeOutCheck = "") Then
EnterUserLogInList rst, TimeOut, MinutesLoggedIn, strTimeOut, StrMinutesLoggedIn
rst.MoveNext
End If
Loop
Set dbs = Nothing
End Sub
__________________________________________________________________________
Function EnterUserLogInList(rstTemp As Recordset, TimeOut, MinutesLoggedIn As Variant, strTimeOut, StrMinutesLoggedIn As Variant)
With rstTemp
.Edit
!StrMinutesLoggedIn = MinutesLoggedIn
!strTimeOut = TimeOut
.Update
.Bookmark = .LastModified
End With
End Function
Sterker nog, bij bovenstaande code slaat het programma vast. Ik loop hier al drie dagen mee te klooien, dus enige hulp wordt zeer gewaardeerd.
Alvast bedankt!
Edit: Stel dat een gebruiker de database aflsuit via de taskmanager (dus niet via de weg die ik voor hem heb uitgestippeld), dan staat zijn username de volgende keer dat hij inlogt, twee keer in de lijst. Ik vind het niet erg als in beide records dan dezelfde uitlogtijd komt te staan. Maar mocht je een manier weten om bij het oudste record (dus met de oudste logintijd) de tekst "Verkeerd uitgelogd" neer te zetten en bij de nieuwste record wél de juiste uitlogtijd, zou dat helemaal geweldig zijn.
Laatst bewerkt: