Установка прав пользователя в MS Access при входе в систему
В настоящее время я работаю в MS Access 2016. Одним из требований к проекту, над которым я работаю, является привязка имени пользователя Windows к MS Access. Я только хватаю пользователей "Имя пользователя". В Access будут права доступа, установленные для пользователей в таблице. После того, как пользователи войдут в систему на основании имеющихся разрешений, они будут перенаправлены на свою начальную страницу. Мне удалось успешно получить логин Windows, но у меня возникли проблемы с подключением к моей внутренней таблице.
Моя таблица называется tblUser, имена полей:
FName LName postion UserName(PK) EmployeeType_ID
Код, который я имею ниже, я получаю ошибку времени выполнения '3077' "Синтаксическая ошибка в строке в выражении" в "rs.FindFirst "UserName='". Я не уверен, что проблема - любая помощь, будет очень оценили.
Private Sub Form_Load()
Debug.Print Environ("UserName")
Debug.Print Environ$("ComputerName")
Dim strVar As String
Dim i As Long
For i = 1 To 255
strVar = Environ$(i)
If LenB(strVar) = 0& Then Exit For
Debug.Print strVar
Next
Dim rs As Recordset
Set rs = CurrentDb.OpenRecordset("tblUser", dbOpenSnapshot, dbReadOnly)
rs.FindFirst "UserName='"
If rs.NoMatch = True Then
MsgBox "You do not have access to this database.", vbInformation, "Access"
Exit Sub
End If
If rs!EmployeeType_ID = 4 Then
Dim prop As Property
On Error GoTo SetProperty
Set prop = CurrentDb.CreateProperty("AllowBypassKey", dbBoolean, False)
CurrentDb.Properties.Append prop
SetProperty:
If MsgBox("Would you like to turn on the bypass key?", vbYesNo, "Allow Bypass") = vbYes Then
CurrentDb.Properties("AllowBypassKey") = True
Else
CurrentDb.Properties("AllowBypassKey") = False
End If
End If
DoCmd.OpenForm "frmManager"
DoCmd.Close acForm
If rs!EmployeeType_ID = 3 Then
DoCmd.OpenForm "frmGeneral_User"
DoCmd.Close acForm
End If
If rs!EmployeeType_ID = 2 Then
DoCmd.OpenForm "frmAdmin"
DoCmd.Close acForm
End If
If rs!EmployeeType_ID = 1 Then
DoCmd.OpenForm "frmGuest"
DoCmd.Close acForm
End If
End Sub
PS Я полностью понимаю, что кто-то может обойти контроль безопасности, установленный в Access. Это специально для функциональности.
1 ответ
Ниже приведена часть того, что я использую при получении данных из бэкэнда:
Вы можете изменить нижеприведенное, чтобы получить права доступа определенных лиц, затем вы можете настроить правильную форму пользователя для отображения на основе данных, извлеченных из серверной части.
Dim acc As Access.Application
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim strSQL As String
Dim strPassword As String
Dim DBpath As String
Dim DBname As String
Dim tblStructure As String
DBpath = "C:\Projects
DBname = "Self Serve Database.accdb"
tblStructure = "_tbl_Structure"
strPassword = "OpenSesame"
strSQL = "INSERT INTO _tbl_Structure " & _
"SELECT * " & _
"FROM [MS Access;pwd=" & strPassword & ";database=" & DBpath & "\" & DBname & "].[" & tblStructure & "] " & _
"WHERE [USER ID] = '" & Environ("username") & "'"