仅为管理员创建按钮MS Access

时间:2018-04-09 15:52:57

标签: vba ms-access access-vba

我正在Microsoft Access中为学校项目创建数据库。我创建了一个登录功能,其中一个企业的员工拥有用户名和密码,并且他们的UserAccess为1或2. 1是用户权限,2是管理员权限。

我设法使用户无法访问数据库中的某些表单,但是,我一直试图让用户的员工无法访问某些按钮。

我创建了一个删除按钮客户表单,以便删除客户。我用宏来做这件事。问题是我不能完全确定如何将其提供给管理员

以下是我的登录表单的代码:

Option Compare Database
Option Explicit

Private Sub btnLogin_Click()
Dim rs As Recordset

Set rs = CurrentDb.OpenRecordset("tblStaff", dbOpenSnapshot, dbReadOnly)

rs.FindFirst "UserName='" & Me.TextUserName & "'"

If rs.NoMatch Then
    Me.lblIncorrectUsername.Visible = True
    Me.TextUserName.SetFocus
    Exit Sub
End If
Me.lblIncorrectUsername.Visible = False



If rs!Password <> Nz(Me.TextPassword, "") Then
    Me.lblIncorrectPass.Visible = True
    Me.TextPassword.SetFocus
    Exit Sub
End If
Me.lblIncorrectPass.Visible = False

    TempVars("EmployeeType") = rs!EmployeeTypeID.Value

    If rs!EmployeeTypeID = 2 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 "Main Menu"
DoCmd.Close acForm, Me.Name

End Sub

为了创建仅向管理员显示按钮的方式,我试图将宏切换到VBA代码并插入代码行:

if EmployeeTypeID= 2 then
me.btnDeleteCustomer.visible = true
else
me.btnDeleteCustomer.visible = false
end if

VBA中完成的宏代码为:

Function Macro1()
If EmployeeTypeID = 2 Then
Me.btDeleteCustomer.Visible = True
Else
Me.btnDeleteCustomer.Visible = False
End If
On Error GoTo Macro1_Err

On Error GoTo 0
DoCmd.RunCommand acCmdDeleteRecord


Macro1_Exit:
    Exit Function

Macro1_Err:
    MsgBox Error$
Resume Macro1_Exit

End Function
Function Macro1_Sub1()
On Error GoTo Macro1_Sub1_Err

Beep
MsgBox "There is nothing to Delete.", vbOKOnly, ""


Macro1_Sub1_Exit:
    Exit Function

Macro1_Sub1_Err:
    MsgBox Error$
    Resume Macro1_Sub1_Exit

End Function

3 个答案:

答案 0 :(得分:0)

您需要将显示/隐藏代码附加到表单加载而不是宏。

这可能对您有所帮助: https://msdn.microsoft.com/en-us/vba/access-vba/articles/form-load-event-access

学习阅读MSDN文章以获得您需要的工作将对您有很大帮助。

答案 1 :(得分:0)

你很亲密。

您正在分配Macro1,但之后您正在If EmployeeTypeID = 2 Then 中执行此操作:

TempVars

我对Access不是很熟悉,但假设TempVars是一些全局值集合,请将对数据写入If TempVars("EmployeeType") = 2 Then 变量的读取替换为:

Me.btDeleteCustomer.Visible = (TempVars("EmployeeType") = 2)

或者,简化条件并分配给布尔表达式:

Option Explicit

另外,在包含Macro1的模块顶部指定EmployeeTypeID:我怀疑你有编译错误,因为{{1}}看起来像是一个未声明的变量。

注意:此代码演示了变量分配,表格列读取和其他基本机制 - 绝不是安全解决方案。不要在需要实际安全的解决方案中使用此类或类似内容。

答案 2 :(得分:0)

应该有一个开始屏幕(有时称为交换机),它在应用程序打开时始终打开。这应该有一个包含用户ID的文本框。 (可见或不可见)。

然后在任何形式的OnCurrent事件中 - 添加VBA以根据用户ID的值控制控件(即按钮)的可见性。