Установка прав пользователя в 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") & "'"
Другие вопросы по тегам