MS Access 表单上的密码保护提交按钮仍会导致按钮提交

Posted

技术标签:

【中文标题】MS Access 表单上的密码保护提交按钮仍会导致按钮提交【英文标题】:Password protecting submit button on MS Access form still results in button submission 【发布时间】:2010-11-12 19:21:18 【问题描述】:

我正在尝试对我在 Microsoft Access 2003 中构建的表单上的提交按钮进行密码保护。单击该按钮时,将向我的数据库中添加一条新记录。密码保护的思想是当用户点击按钮时,会出现一个提示,要求输入密码。他们可以输入密码并单击“确定”以继续验证已正确输入密码,也可以单击“取消”并关闭提示窗口(之后他们将收到确认警报)。如果密码与硬编码的密码匹配,则将添加记录。如果密码不匹配,则会显示错误消息。

这应该很容易。但是,无论密码输入错误、未输入密码或用户退出密码窗口,该记录都将始终添加到数据库中。下面的代码我做错了什么?

Private Sub AddLeadServerButton_Click()
    Dim strPasswd

    strPasswd = InputBox("Enter Password", "Restricted Form")

    'Check to see if there is any entry made to input box, or if
    'cancel button is pressed. If no entry made then exit sub.

    If strPasswd = "" Or strPasswd = Empty Then
        MsgBox "No Input Provided", vbInformation, "Required Data"
        Exit Sub
    End If

    'If correct password is entered open Employees form
    'If incorrect password entered give message and exit sub

    If strPasswd = "thepassword" Then
        DoCmd.GoToRecord , , acNewRec
        Me.Parent!NewInstallation.Form!InstallationLeadServerComboBox.Requery
        Me.Parent!NewReport.Form!LeadServerFilterComboBox.Requery
    Else
        MsgBox "Sorry, you do not have access to this form", _
               vbOKOnly, "Important Information"
        Exit Sub
    End If
End Sub

【问题讨论】:

您确实意识到任何有足够智慧的人都可以查看您的代码(或编译后的 MDE/ACCDE)并自己找出密码,对吧? 是的,但我担心的并不是信息的机密性,只是让我们团队中的某个人添加记录变得不方便,以至于他们需要密码会让他们知道他们不应该这样做。我对 Access 了解不多也无济于事。 为什么不检查他们的登录名并将其限制为您不想添加记录的人? 维护允许访问该文件的人员列表的开销令人望而却步,但如果您建议高于其他任何一个答案,我会接受它作为解决方案。 你不需要维护一个列表。如果有一个 NTFS 安全组及其成员,那么您可以在那里检查他们的成员资格。我们讨论了多少人应该获得访问权限? 【参考方案1】:

要完成您想要的行为,您必须设置表单以防止添加新记录。然后,向用户询问密码,重新设置表单以启用添加新记录,然后移动到新记录。

    如果属性表不是 显示,在查看菜单上,单击 显示表单的属性 属性表。

    在表单属性表中,单击 数据选项卡,然后设置 AllowAdditions属性改为编号。

    添加一个命令按钮到 形式。设置命令 按钮的 OnClick 属性为 [Event 过程],然后单击构建 OnClick 右侧的按钮 属性框。键入以下内容 Form_Customers 中的声明 模块:

    Forms!Customers.AllowAdditions = True
    

http://support.microsoft.com/kb/208586

我不建议在用户输入数据后检查密码。当您填写表格时会感到沮丧,最后却发现您无权保存您的工作。

【讨论】:

这个解决方案似乎可以正常工作。我决定做的只是创建一个“管理员”用户/组帐户,当您最初打开文件时需要密码。我将指示任何应该被清除的人修改数据库以使用此登录 ID 和我为其设置的密码。【参考方案2】:

在您的表单上挂钩BeforeInsert 事件,并在那里添加密码检查。如果他们没有提供正确的密码,您可以设置Cancel=True,这将导致添加记录被放弃。

例子:

Private Sub Form_BeforeInsert(Cancel As Integer)
    If MsgBox("Insert new record here?", _
        vbOKCancel) = vbCancel Then
        Cancel = True
    End If
End Sub

【讨论】:

我应该提一下,这个表单有 2 个 ComboBox 供您从中选择值,还有提交按钮。每次从任一列表中选择一个值时,添加上面的代码都会导致“在此处插入新记录”提示。理想情况下,提示应该只在您单击“提交”时出现。 不幸的是,当第一个字符输入到空表单的第一个字段时,记录被插入。这就是 Access 的工作方式。如果要覆盖该行为,则必须自己插入记录;这并不难。我将使用该技术添加另一个答案。【参考方案3】:

尽量避免使用绑定表单,这将使您通过一些额外的工作来更好地控制您的数据,考虑它的最佳方法是从相反的两端处理您的数据。

绑定表单主要是告诉数据库阻止您不希望进行的更新,而未绑定表单更多的是在您完全满意之前不要进行任何更改。

只是个人喜好,但我认为 unbound 值得花时间和精力。

【讨论】:

以上是关于MS Access 表单上的密码保护提交按钮仍会导致按钮提交的主要内容,如果未能解决你的问题,请参考以下文章

即使未单击单选按钮,仍会提交表单[重复]

MS Access 2003 - Access 表单上的嵌入式 Excel 电子表格

防止用户绕过 MS Access 上的登录表单

如何使用 Python 单击 MS Access 上的按钮

MS Access vba 保存按钮错误 3021

网页设计,Access入门 2010,数学