使某个用户类型的表单只读

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)

以上是关于使某个用户类型的表单只读的主要内容,如果未能解决你的问题,请参考以下文章

如何使整个 HTML 表单“只读”?

使 TextInputEditText 只读但可点击

如何使用角度指令动态地使表单元素只读?

jquery 使字段不可编辑,没有只读或禁用

如何防止我的表单的只读字段数据?

Angular:表单字段只读模式