我试图限制用户打开一个表单的可用性。下面的代码可以识别正确的用户访问类型和正确的表单名称,但是我得到的是运行时错误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
所有的帮助将是最感激的,因为我在一个最后期限完成这个
如果你的字段 Employeeaccesstype
和 FormName
是文本,那么Dlookup中的值就需要用单引号包装。此外,你应该考虑到记录在表中不存在的可能性(从DLookup返回一个Null值)。
If Nz(DLookup("Hasaccess", "tblemployeeaccess", "Employeeaccesstype ='" & cable & "' AND FormName='" & thisform & "'"),False) = False Then
你还应该考虑首先不允许他们打开表单。
祝贺你。
我在这里改变了策略,采用了不同的方法。我创建了一个新的表来保存用户的登录信息,并创建了一个查询来连接表上的详细信息,并在Dlookup上引用,而不是试图通过一个变量来引用登录表单。随着这些改变,我把DLookup改成了下面这个样子。
If DLookup("Hasaccess", "AccessQuery", "HasAccess =false and Formname = 'Part' ") =
False Then
DoCmd.Close
MsgBox "You Do Not Have Access"
End If
现在工作正常了。非常感谢Applecore对这个问题的帮助。