Puzzel Puzzels
Gebruikersavatar
Raspoetin
Artikelen: 0
Berichten: 3.507
Lid geworden op: wo 28 sep 2005, 15:46

Vba ms access bijhouden van gebruikerslog bestand

Ik heb een probleempje met VBA in Access en ik loop er nu al dagen mee te klooien, en toch blijf ik mijn fout maar niet zien. Het gaat om het volgende. Ik heb een database gemaakt, waarin elke keer als een gebruiker inlogt, zijn naam + inlogtijd in een tabel worden bijgeschreven. Gegevens tabel:

tblUserloggedIn met daarin de volgende fields:

Code: Selecteer alles

strUsername	 strEchtenaam	 strTime	 strTimeOut	 strMinutesLoggedIn
Alle bovenstaande fields zijn tekst gebaseerd.

Wanneer iemand inlogt met zijn Username, wordt in de database opgezocht wat zijn echte naam is, en deze twee namen worden dan in de tabel bijgeschreven, samen met de tijd/datum van inloggen. Dit werkt voor zover. De code voor deze handeling is hierachter als verborgen inhoud gegeven omdat ik hier dus géén problemen mee heb (Username2 is een public constant die gelijk is aan de username van de gebruiker)
Verborgen inhoud

Code: Selecteer alles

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


Echter, nu zou ik willen bijhouden wanneer mensen uitloggen, en hoe lang ze ingelogd zijn. En laat ik hier nou problemen mee hebben. Mijn wens: Op het moment dat de gebruiker bij de vraag "Weet u zeker dat u wilt uitloggen" op de knop "Ja" drukt, moet er in tblUsersLoggedIn het record opgezocht worden waarin het field strUsername gelijk is aan de username van de gebruiker, dan de tijd van dat moment (Now) bijschrijven in het field strTimeOut, vervolgens moet er berekend worden hoeveel minuten er zijn verstreken tussen strTime en strTimeOut en dat moet dan weer weggeschreven worden in het field strMinutesLoggedIn.

Een bijkomend probleem is dat een gebruiker meerdere keren na elkaar kan in/uitloggen, en dat de lijst niet wordt leeggehaald (behalve als ik dat als beheerder doe). Het komt dus voor dat een bepaalde gebruikersnaam meerdere keren in de lijst staat. Het is uiteraard de bedoeling dat records waar al een waarde voor strTimeOut staat, deze niet veranderd wordt (dit zijn "oude" records die correct zijn ingevuld, oftewel het UserLog).

Een laatste probleem: De Access database speelt zich af in een maximized window, zodat gebruikers geen ander window te zien krijgen dan dat van mij. Ik "dwing" gebruikers dus om via de correcte manier uit te loggen (zoals ik het voor ogen heb). Echter, het kan voorkomen dat een gebruiker via taakbeheer Access afsluit zodat geen waarde wordt bijgeschreven voor strTimeOut. Als de gebruiker de volgende keer inlogt, wordt zijn username weer in de tabel strUsersLoggedIn opgenomen. Er zijn op dat moment twee records in de tabel met dezelfde username, en waarbij voor beide records geen strTimeOut is ingevuld. Dit gebeurt uiteraard pas op het moment van uitloggen van de gebruiker. Het zou helemaal mooi zijn, als er bij het oudste record in het field strTimeOut "Foutief Uitgelogd" komt te staan (of iets dergelijks).

Goed, ik hoop dat de bedoeling een beetje duidelijk is (ik heb het zo uitgebreid mogelijk proberen op te schrijven), maar als iets niet helemaal duidelijk is hoor ik het graag. Nog een laatste opmerking: Ik heb mijzelf VBA geleerd en ik begrijp best dat alles efficiënter of handiger geprogrammeerd kan worden. Bij voorbaat excuses voor mijn programmeerkunsten :eusa_whistle: .

Nu last but not least, de code zoals ik hem heb uitgevogeld (maar dus niet werkt (sterker nog, het programma komt in een loop of slaat vast)):

Code: Selecteer alles

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
I'm not suffering from insanity - I'm enjoying every minute of it!!

ads

Steun Sciencetalk Donald Duck - Scheurkalender - 2026 - Elke dag een snaterlach!

Donald Duck - Scheurkalender - 2026 - Elke dag een snaterlach!

Bekijk product

Steun Sciencetalk Logitech M185 - Draadloze Muis - Blauw

Logitech M185 - Draadloze Muis - Blauw

Bekijk product

Steun Sciencetalk Western Digital Elements Portable - Externe Harde Schijf - 4 TB

Western Digital Elements Portable - Externe Harde Schijf - 4 TB

Bekijk product

Nvt
Artikelen: 0
Berichten: 99
Lid geworden op: di 17 jul 2007, 06:20

Re: Vba ms access bijhouden van gebruikerslog bestand

Code: Selecteer alles

Function EnterUserLogInList(rstTemp As Recordset, TimeOut, MinutesLoggedIn As Variant, strTimeOut, StrMinutesLoggedIn As Variant)
Hoe zit het met de parameters TimeOut en strTimeOut, moet er niet iets van type bij staan -> naam As type ?
Scispace Scispace

Scispace is dé ai voor wetenschappers en onderzoekers. Ga naar SciSpace en profiteer van één van de beste ai's.

Scispace

Gebruikersavatar
Raspoetin
Artikelen: 0
Berichten: 3.507
Lid geworden op: wo 28 sep 2005, 15:46

Re: Vba ms access bijhouden van gebruikerslog bestand

Die staan toch als variant type aangeduid? strTimeOut as Variant......

Maar misschien begrijp ik je verkeerd.
I'm not suffering from insanity - I'm enjoying every minute of it!!
Gebruikersavatar
Raspoetin
Artikelen: 0
Berichten: 3.507
Lid geworden op: wo 28 sep 2005, 15:46

Re: Vba ms access bijhouden van gebruikerslog bestand

Verder helemaal niemand die mij helpen kan?
I'm not suffering from insanity - I'm enjoying every minute of it!!

ads

Steun Sciencetalk Nereb USB-C/USB Kaartlezer – microSD/SD/TF Card Reader – Met USB-A Adapter

Nereb USB-C/USB Kaartlezer – microSD/SD/TF Card Reader – Met USB-A Adapter

Bekijk product

Steun Sciencetalk bol cadeaukaart - 25 euro - Bedankt!

bol cadeaukaart - 25 euro - Bedankt!

Bekijk product

Steun Sciencetalk Verzendzakken voor Kleding (L) - 25 stuks

Verzendzakken voor Kleding (L) - 25 stuks

Bekijk product

Gebruikersavatar
Raspoetin
Artikelen: 0
Berichten: 3.507
Lid geworden op: wo 28 sep 2005, 15:46

Re: Vba ms access bijhouden van gebruikerslog bestand

Ondanks de 200+ bezichtigingen die mijn vraag heeft getrokken heeft helaas niemand mij kunnen helpen. Na heel wat geklooi ben ik er dan toch zelf achter gekomen (het heeft alleen ruim een maand geduurd :eusa_whistle: ):

Code: Selecteer alles

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
I'm not suffering from insanity - I'm enjoying every minute of it!!

Plaats een reactie

Je mail wordt niet openbaar getoond. Het wordt enkel gebruik voor contact of notificatie vanuit het beheer.

🗨️ Wat vind jij? Stel direct je vraag of geef je mening – zonder registratie. Je reactie zet het topic weer bovenaan bij 'Laatste posts' en trekt snel nieuwe reacties aan🔥. Mocht je als vaste bezoeker willen reageren, dan kun je je ook registreren.

Bevestig dat je geen robot bent door de volgende vragen te beantwoorden.

Noor heeft 10 knikkers. Ze verliest er 4 in het gras. Hoeveel heeft ze er nog?

Antwoord: (vul een getal in)

Er zitten 5 vogels op een hek. Twee vliegen weg. Hoeveel blijven er zitten?

Antwoord: (vul een getal in)

Terug naar “Informatica en programmeren”

Sciencetalk: Leer, deel of groei. Volg of geef een cursus op Sciencetalk!