JMongi
Active member
- Local time
- Yesterday, 23:26
- Joined
- Jan 6, 2021
- Messages
- 802
So, I have benefitted greatly from various sample DBs and VBA code posted on this forum. Thanks!
My application is quickly expanding in complexity. It's exciting and daunting...but, such is life sometimes. Philosophizing aside, I'm trying to clean up the underlying VBA code from a variety of modules and code snippets so that it is clearer and more maintainable (and ensuring that even though its not mine, I understand exactly what it is doing or supposed to do).
In the various login code for initiating a user session I am using as a base code from @isladogs that works just fine. In the module there are public variables declared such as "strUserName" and "intAccessLevel". These are used during the use of the login form. Part of the sample package includes an "add user" form for the admin to add a new user. In the add user form VBA there are variables defined using Dim that are also "strUserName" and "intAccessLevel". These variables are used in direct SQL statements to insert the new users into the appropriate table.
I presume the variables that are Dim'ed in the add user form do not interact with the variables in the module.
In summary:
1. In frmNewUser, the Dim variables are used to construct an SQL statement to write a new user record to the users table.
2. In modAuditLog, the public variables are used to construct an SQL statement to write session log information to the appropriate tables. Since these functions may be called via multiple forms, this was structured as a module and variables are public so they can be used by whatever form is calling the module.
I just want to confirm my understanding before I go editing/expanding the user access portions of this code to meet my own needs. Here are code snippets for reference:
modAuditLog Snippet
frmNewUser Snippet
My application is quickly expanding in complexity. It's exciting and daunting...but, such is life sometimes. Philosophizing aside, I'm trying to clean up the underlying VBA code from a variety of modules and code snippets so that it is clearer and more maintainable (and ensuring that even though its not mine, I understand exactly what it is doing or supposed to do).
In the various login code for initiating a user session I am using as a base code from @isladogs that works just fine. In the module there are public variables declared such as "strUserName" and "intAccessLevel". These are used during the use of the login form. Part of the sample package includes an "add user" form for the admin to add a new user. In the add user form VBA there are variables defined using Dim that are also "strUserName" and "intAccessLevel". These variables are used in direct SQL statements to insert the new users into the appropriate table.
I presume the variables that are Dim'ed in the add user form do not interact with the variables in the module.
In summary:
1. In frmNewUser, the Dim variables are used to construct an SQL statement to write a new user record to the users table.
2. In modAuditLog, the public variables are used to construct an SQL statement to write session log information to the appropriate tables. Since these functions may be called via multiple forms, this was structured as a module and variables are public so they can be used by whatever form is calling the module.
I just want to confirm my understanding before I go editing/expanding the user access portions of this code to meet my own needs. Here are code snippets for reference:
modAuditLog Snippet
Code:
Option Compare Database
Option Explicit
'Public declarations
Public lngUserId As Long
Public strUserName As String
Public strComputerName As String
Public strPassword As String
Public intAccessLevel As Integer
Public blnChangeOwnPassword As Boolean
Public lngLoginID As Long
Function LogMeIn(strUserName As Long)
'Go to the users table and record that the user has logged in and which computer they have logged in from
CurrentDb.Execute "UPDATE tblUsers SET LoggedIn = True, Computer = GetComputerName()" & _
" WHERE UserName='" & GetUserName & "' AND tblUsers.Active=True;"
End Function
Function LogMeOff(strUserName As Long)
'Go to the users table and record that the user has logged out
CurrentDb.Execute "UPDATE tblUsers SET LoggedIn = False, Computer = ''" & _
" WHERE UserName='" & GetUserName & "';"
End Function
Function CreateSession(LoginID As Long)
'This function records the login details of the person
'Get the new loginID
'v5 21/11/2018 - added Nz to manage case where no record exists
lngLoginID = Nz(DMax("LoginID", "tblLoginSessions") + 1, 1)
CurrentDb.Execute "INSERT INTO tblLoginSessions ( LoginID, UserName, LoginEvent, ComputerName )" & _
" VALUES(GetLoginID(), GetUserName(), Now(), GetComputerName());"
End Function
Function CloseSession()
'This closes the open session
'set logout date/timein tblLoginSessions
CurrentDb.Execute "UPDATE tblLoginSessions SET LogoutEvent = Now()" & _
" WHERE LoginID= " & GetLoginID & ";"
'clear user login in tblUsers
CurrentDb.Execute "UPDATE tblUsers SET LoggedIn = False, Computer = Null" & _
" WHERE UserName= '" & GetUserName & "';"
End Function
Public Function GetComputerName() 'gets computer name used to log in to database
GetComputerName = CreateObject("WScript.Network").ComputerName
End Function
Public Function GetUserName() 'gets logged in user name
GetUserName = strUserName
End Function
Public Function GetLoginID() 'gets loginID for the current session
GetLoginID = lngLoginID
End Function
frmNewUser Snippet
Code:
Option Compare Database
Option Explicit
Dim strUserName As String
Dim intPasswordExpireDays As Integer
Dim blnChangePWD As Boolean
Dim intAccessLevel As Integer
Dim dtePwdDate As Date
Private Function CheckValidUserName() As Boolean
CheckValidUserName = True
If Nz(Me.txtUserName, "") = "" Then
FormattedMsgBox "User name NOT entered" & _
"@Please try again @", vbCritical, "You MUST enter a user name!"
CheckValidUserName = False
ElseIf Len(txtUserName) > 15 Or InStr(txtUserName, " ") > 0 Then
FormattedMsgBox "The user name must have a maximum of 15 characters with no spaces" & _
"@Please try again @", vbCritical, "User name error"
CheckValidUserName = False
End If
If CheckValidUserName = False Then
cmdAdd.Enabled = False
Me.txtUserName = ""
Me.txtExpireDays = 0
Me.cboChangePWD = "No"
Me.cboLevel = 1
Me.txtUserName.SetFocus
End If
End Function
Private Sub cmdAdd_Click()
strUserName = Me.txtUserName
intPasswordExpireDays = Nz(Me.txtExpireDays, 0)
blnChangePWD = IIf(Me.cboChangePWD = "Yes", -1, 0)
intAccessLevel = Nz(Me.cboLevel, 1)
If intPasswordExpireDays > 0 Then dtePwdDate = Date
'add new user
If dtePwdDate <> 0 Then
'v5.3 17/02/2020 - corrected date code to fix error
CurrentDb.Execute "INSERT INTO tblUsers ( UserName, Active, PWD, ChangePWD, ExpireDays, AccessLevel, PWDDate)" & _
" SELECT '" & strUserName & "' AS UserName, True AS Active, '" & SetDefaultPwd() & "' AS PWD," & _
" " & blnChangePWD & " AS ChangePWD, " & intPasswordExpireDays & " AS ExpireDays," & _
" " & intAccessLevel & " AS AccessLevel, #" & Format(dtePwdDate, "mm/dd/yyyy") & "# AS PWDDate;"
Else 'omit PWDDate
CurrentDb.Execute "INSERT INTO tblUsers ( UserName, Active, PWD, ChangePWD, ExpireDays, AccessLevel)" & _
" SELECT '" & strUserName & "' AS UserName, True AS Active, '" & SetDefaultPwd() & "' AS PWD," & _
" " & blnChangePWD & " AS ChangePWD, " & intPasswordExpireDays & " AS ExpireDays," & _
" " & intAccessLevel & " AS AccessLevel;"
End If
Me.lblInfo.Caption = "New user " & Me.txtUserName & " has been successfully added" & vbCrLf & _
"A default password 'Not set' has been added" & vbCrLf & _
Me.txtUserName & " will be required to enter a new password at first login"
End Sub