使某个用户类型的表单只读
Posted
技术标签:
【中文标题】使某个用户类型的表单只读【英文标题】:Making a form read-only for a certain user type 【发布时间】:2018-02-08 17:29:44 【问题描述】:我创建了一个登录表单,其中包含用于用户类型(管理员、用户)的组合框和用于密码的文本框。表单的代码如下。
Private Sub txtPassword_AfterUpdate()
If IsNull(Me.cboUser) Then
MsgBox "You need to select a user!", vbCritical
Me.cboUser.SetFocus
Else
If Me.txtPassword = Me.cboUser.Column(2) Then
If Me.cboUser.Column(3) = True Then
MsgBox "Password does not match, please re-enter!", vboOkOnly
Me.txtPassword = Null
Me.txtPassword.SetFocus
End If
DoCmd.OpenForm "FE1"
Me.Visible = False
Else
MsgBox "Password does not match, please re-enter!", vboOkOnly
Me.txtPassword = Null
Me.txtPassword.SetFocus
End If
End If
End Sub
Private Sub cboUser_AfterUpdate()
Forms!frmLogin!cboUser.Column (2)
End Sub
如果以用户身份登录,当他们进入 FE1 表单时,我希望他们能够阅读表单,而不是进行任何更改。我一直在尝试使用的代码如下:
Private Sub Form_Open()
If Forms!frmLogin!cboUser.Column(2) = 2 Then
Me.AllowEdits = False
Me.AllowAdditions = False
Me.AllowDeletes = False
Else
Me.AllowEdits = True
Me.AllowAdditions = True
Me.AllowDeletes = True
End If
End Sub
但我不断收到错误:
您输入的表达式 On Open 作为事件属性设置 产生以下错误:过程声明没有 匹配具有相同名称的事件或过程的描述。
*表达式可能不会产生宏名称、用户定义函数名称或[事件过程]。 *评估函数、事件或宏时可能出现错误。
可能我只是看这个太久了,但我不知道我哪里出错了!?
【问题讨论】:
确保您的Form.OnOpen
属性设置为"[Event Procedure]"
。此错误往往会发生,但实际上并非如此。
这里是公平的警告,如果这些密码只是为了让数据库更易于使用,那很好,但希望你知道这不会提供任何安全性。
Form.OnOpen 设置为“[事件过程]”。
对于这个数据库来说,高级别的安全性并不是必须的。
【参考方案1】:
您的Form_Open
过程签名错误,缺少Cancel
参数。
一定是:
Private Sub Form_Open(Cancel As Integer)
不要手动编写事件过程,让 Access 创建它们。
编辑
我建议您完全删除 Form_Open
子。然后让 Access 从属性表中创建它。
您可以使用这样的变量来简化代码:
Private Sub Form_Open(Cancel As Integer)
Dim AllowWriting As Boolean
AllowWriting = Not (Forms!frmLogin!cboUser.Column(2) = 2)
Me.AllowEdits = AllowWriting
Me.AllowAdditions = AllowWriting
Me.AllowDeletes = AllowWriting
End Sub
RecordsetType Property 甚至更短:
Private Sub Form_Open(Cancel As Integer)
If Forms!frmLogin!cboUser.Column(2) = 2 Then
Me.RecordsetType = 2 ' Snapshot = read-only
Else
Me.RecordsetType = 0 ' Dynaset = read-write
End If
End Sub
【讨论】:
当我添加Cancel
参数时,我得到错误:Compile error: Method or data member not found
,然后当我单击确定时,我将转到我的代码,它突出显示Private Sub Form_Open(Cancel As Integer)
。以上是关于使某个用户类型的表单只读的主要内容,如果未能解决你的问题,请参考以下文章