VBA Access; gebruikerslog vullen/bijhouden

Status
Niet open voor verdere reacties.

Raspoetin

Nieuwe gebruiker
Lid geworden
23 aug 2009
Berichten
4
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:
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
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?
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:
Helemaal niemand?

Aan de moderators: Misschien is dit niet het juiste subforum voor mijn vraag (dat hij bij access moet staan of zo)?
 
Ik kan me een eenvoudiger werkwijze voorstellen

Bij inloggen en uitloggen

Code:
Open "C:\inlog.txt" for Append as #1
   print #1,Environ("Username") & vbtab & formatdatetime(now)
Close
 
Ik ben niet bekend met de code die je aangeeft, maar ik begrijp dat er dan een nieuwe txt file wordt aangemaakt, en dat is juist iets dat ik niet zou willen. Ik zou graag willen dat het in- en uitloggen in een tabel in access wordt weergegeven. Op mijn beheerderspaneel zit een knop waarmee ik een form open waarin de tabel tblUsersLoggedIn wordt weergegeven.
 
Helaas heeft niemand mij kunnen helpen. Na heel wat geklooi ben ik er dan toch zelf achter gekomen (het heeft alleen ruim een maand geduurd :( ):
Code:
Public Sub AddUserLog()
Dim dbs As Database
Dim rst As Recordset
Dim FstrTime, FstrUsername, FstrTimeOut, FstrMinutesLoggedIn  As Field
Dim MinutesLoggedIn, strTimeTemp, strTimeOut, CountNumber As Variant
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("tblUsersloggedin", dbOpenDynaset)


rst.MoveFirst
rst.MoveLast
rst.MoveFirst
rst.MoveLast
CountNumber = 0
Do
MinutesLoggedIn = 0

FstrTimeOut = rst.Fields("strTimeOut")
FstrTime = rst.Fields("StrTime")

strUsernameCheck = rst.Fields("strUsername")
If strUsernameCheck = Username2 And (IsNull(FstrTimeOut) Or FstrTimeOut = "") Then
            CountNumber = CountNumber + 1
            strTimeOut = Format(Now, "dd mmm yyyy hh:mm:ss")
            MinutesLoggedIn = DateDiff("n", FstrTime, Now)
            If CountNumber > 1 Then
            EnterUserLogInList rst, FstrTimeOut, FstrMinutesLoggedIn, strTimeOut, MinutesLoggedIn
            Else:
            EnterUserLogInListWrongLogout rst, FstrTimeOut, FstrMinutesLoggedIn, strTimeOut, MinutesLoggedIn
            End If
        End If
    
rst.MovePrevious
Loop Until rst.BOF = True

Set dbs = Nothing
End Sub
______________________________________________

Function EnterUserLogInList(rstTemp As Recordset, FstrMinutesLoggedIn, FstrTimeOut As Field, strTimeOut, MinutesLoggedIn As Variant)
With rstTemp
    .Edit
    !strMinutesLoggedIn = MinutesLoggedIn
    !strTimeOut = strTimeOut
    .Update
    .Bookmark = .LastModified
End With
End Function
______________________________________________

Function EnterUserLogInListWrongLogout(rstTemp As Recordset, FstrMinutesLoggedIn, FstrTimeOut As Field, strTimeOut, MinutesLoggedIn As Variant)
With rstTemp
    .Edit
    !strMinutesLoggedIn = "Fout Uitgelogd!"
    !strTimeOut = strTimeOut
    .Update
    .Bookmark = .LastModified
End With
End Function
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan