具有访问级别的MS Access 2010登录表单

时间:2015-05-18 06:30:00

标签: vba login access-vba ms-access-2010

我的管理层想要一个访问数据库,可以控制哪些用户可以查看表单上的特定字段。例如,如果管理员登录,表单将显示性能评级字段。对于任何其他用户,性能评级字段将不可见。

到目前为止,以下是我的一些选择:

1)使用VBA检测访问应用程序的用户名,如果是其管理员的名称,则文本框可见。

2)使用需要用户登录的用户名参考表。具有特殊访问权限的用户将看到文本框。

3)在表单上有一个特殊的小按钮,如果有人点击,将加载一个小密码对话框,然后将文本设置为可见。

哪个选项最难实施?

2 个答案:

答案 0 :(得分:0)

我已经实现了选项nr 1和2,它们我们很容易构建。 选项nr 3似乎同样困难。

我的工作环境中的问题是哪个选项在(帐户)维护方面较低,而且需要用户付出很少的努力。

从该视图选项nr.1更成功。

(我宁愿建立不同的形式,而不是打开/关闭字段的视图设置)

答案 1 :(得分:0)

使用登录表单获取用户特定信息的想法可以通过互联网获得。我建议你所有三个想法的组合将只是完美的解决方案。

对于您拥有的两种方法中的任何一种(1& 2),您首先需要一个能够保存信息的表。该表不需要复杂(至少不是立即)。该表应具有以下结构,

Participant  Total 
1         37
2       
40       -14

然后你必须创建一个Form,一个基本表单,它将有三个控件,两个Text Box和一个Button。第一个文本框用于输入员工用户名,第二个用于输入密码。最后一个按钮,魔术发生在其后。按钮后面的代码(简化)将是一些类似的东西。

tbl_Employees
-------------
EmpID       -   Auto Number -   PK
EmpNam      -   Text
EmpUserName -   Text
EmpPassword -   Text        -   Input Mask (If required)
IsManager   -   Yes/No      -   Default - No 

如您所见,我使用过

(a) Recordset对象而不是简单的DLookup。我更喜欢记录集对象,您可以使用DLookup,但您必须确保处理Private Sub LogInBtn_Click() On Error GoTo errOccured Dim eQryStr As String, empRS As DAO.Recordset eQryStr = "SELECT EmpID, EmpUserName, EmpPassword, IsManager FROM tbl_Employees WHERE EmpUserName = '" & Me.UserNameTxt & "'" Set empRS = CurrentDb.OpenRecordset(eQryStr) If empRS.RecordCount <> 0 Then If Me.PwdTxt = empRS!EmpPassword Then If empRS!IsManager Then DoCmd.OpenForm "ManagerForm" Else DoCmd.OpenForm "EmployeeForm" End If Me.Visible = False Else wrongEntry "Password" End If Else wrongEntry "User Name" End If exitOnError: Set empRS = Nothing Exit Sub errOccured: wrongEntry "User Name/Password" Resume exitOnError End Sub Private Sub wrongEntry(entityStr As String) MsgBox entityStr & " is incorrect (OR) omitted, please check again.", vbCritical End Sub (如果不符合条件)。

(b)管理人员和员工的单独表格。我想在员工表单上没有的管理者表单上会有更多内容。如果您不希望这样,但可以使用一个表单,但是您需要告知登录用户的开头表格 - 使用OpenForm方法的 OpenArgs 属性。

如果你想避免所有的麻烦并使用密码框,就可以访问TextBox。只需按照此主题中的说明进行操作即可Password Box - A variant of Input Box。然后在您当前拥有的表单上创建一个按钮,然后单击该按钮,您只需编写以下代码。

Null

PS:隐藏文本控件应设置为不可见,最好在Form current事件中。

我希望这会有所帮助。