当设置用户权限为特定用户打开特定表单时,我从DLookup语句中得到一个运行时错误信息

问题描述 投票:0回答:1

我试图限制用户打开一个表单的可用性。下面的代码可以识别正确的用户访问类型和正确的表单名称,但是我得到的是运行时错误2471。我希望得到一些帮助,因为我不知道哪里出了问题。

在这种情况下,错误语句是:"运行时错误'2471'。运行时错误'2471': 你作为查询参数输入的表达式产生了这个错误:"股票"。当我去调试时,它把我带到了DLookup,我看不出有什么问题。

观察表达式:观察:: "Employeeaccesstype =" & cable & " " & "AND FormName=" & thisform : "Employeeaccesstype =0 AND FormName=Stock" : String : Form_Stock.Form_Load。

Private Sub Form_Load()
Dim cable As String
cable = TempVars("AccessType")
Dim thisform As String
thisform = Me.Form.Name
If DLookup("Hasaccess", "tblemployeeaccess", "Employeeaccesstype =" & cable & " " & "AND FormName=" & thisform) = False Then
DoCmd.Close
MsgBox "You Do Not Have Access"
End If
End Sub

所有的帮助将是最感激的,因为我在一个最后期限完成这个

access-vba ms-access-2016
1个回答
0
投票

如果你的字段 EmployeeaccesstypeFormName 是文本,那么Dlookup中的值就需要用单引号包装。此外,你应该考虑到记录在表中不存在的可能性(从DLookup返回一个Null值)。

If Nz(DLookup("Hasaccess", "tblemployeeaccess", "Employeeaccesstype ='" & cable & "' AND FormName='" & thisform & "'"),False) = False Then

你还应该考虑首先不允许他们打开表单。

祝贺你。


0
投票

我在这里改变了策略,采用了不同的方法。我创建了一个新的表来保存用户的登录信息,并创建了一个查询来连接表上的详细信息,并在Dlookup上引用,而不是试图通过一个变量来引用登录表单。随着这些改变,我把DLookup改成了下面这个样子。

If DLookup("Hasaccess", "AccessQuery", "HasAccess =false and Formname = 'Part' ") = 
False Then
DoCmd.Close
MsgBox "You Do Not Have Access"

End If

现在工作正常了。非常感谢Applecore对这个问题的帮助。

© www.soinside.com 2019 - 2024. All rights reserved.