我的管理层想要一个访问数据库,可以控制哪些用户可以查看表单上的特定字段。例如,如果管理员登录,表单将显示性能评级字段。对于任何其他用户,性能评级字段将不可见。
到目前为止,以下是我的一些选择:
1)使用VBA检测访问应用程序的用户名,如果是其管理员的名称,则文本框可见。
2)使用需要用户登录的用户名参考表。具有特殊访问权限的用户将看到文本框。
3)在表单上有一个特殊的小按钮,如果有人点击,将加载一个小密码对话框,然后将文本设置为可见。
哪个选项最难实施?
答案 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事件中。
我希望这会有所帮助。