Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access 密码保护MS Access表单上的提交按钮仍会导致按钮提交_Ms Access_Forms_Vba_Password Protection_Ms Access 2003 - Fatal编程技术网

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

Ms access 密码保护MS Access表单上的提交按钮仍会导致按钮提交,ms-access,forms,vba,password-protection,ms-access-2003,Ms Access,Forms,Vba,Password Protection,Ms Access 2003,我正在尝试对Microsoft Access 2003中生成的表单上的提交按钮进行密码保护。单击该按钮时,将向我的数据库添加一条新记录。密码保护的概念是,当用户单击按钮时,会出现提示,询问密码。他们可以输入密码并单击“确定”继续验证密码输入是否正确,也可以单击“取消”并关闭提示窗口(之后将收到确认警报)。如果密码与硬编码的密码匹配,则会添加记录。如果密码不匹配,将显示错误消息 这应该很容易。但是,无论密码输入错误、未输入密码或用户在密码窗口外取消,记录都将始终添加到数据库中。下面的代码我做错了什

我正在尝试对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

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

例如:

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

要实现所需的行为,必须设置表单以防止添加新记录。然后,要求用户输入密码,将表单设置回启用添加新记录,然后移动到新记录

  • 如果属性页不可用 显示,在“视图”菜单上,单击 属性以显示窗体的 属性表

  • 在表单属性页中,单击 单击“数据”选项卡,然后设置
    allowaditions
    属性为否

  • 将命令按钮添加到 形式。设置命令 按钮的
    OnClick
    属性指向[事件] 过程),然后单击生成 OnClick右侧的按钮 属性框。键入以下内容
    表格中的声明\u客户
    模块:


  • 我不建议在用户输入数据后检查密码。当你填写表单时,结果却发现你没有保存工作的权限,这会让你感到沮丧。

    尽量避免使用绑定表单,这会让你通过一点额外的工作来更好地控制数据,最好的办法是从相反的端处理数据

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


    这只是个人喜好,但我认为“未绑定”是值得花费时间和精力的。

    我可能应该提到,此表单有两个组合框,您可以从中选择值,以及“提交”按钮。添加上述代码会导致每次从任一列表中选择值时出现“在此处插入新记录”提示。理想情况下,只有当您单击“提交”时才会出现提示。不幸的是,在空白表单的第一个字段中键入第一个字符时,会插入记录。这就是访问的工作方式。如果要覆盖该行为,必须自己插入记录;这并不难做到。我将用这种技术添加另一个答案。您确实意识到,任何有足够智能的人都可以查看您的代码(或编译的MDE/ACCDE)并为自己找出密码,对吗?是的,但我担心的不是信息的保密性,这只会给我们团队中的其他人添加记录带来不便,以至于他们需要密码才能知道他们不应该这样做。我对访问知之甚少也无济于事。为什么不检查他们的登录名,并限制那些你不想添加记录的人登录?维护允许访问该文件的人的列表的开销是不允许的,但如果你建议在上述任何一个答案之上,我接受这个解决方案。你不需要维护一个列表。若有一个NTFS安全组,其中包含成员,那个么您可以在那个里检查他们的成员资格。我们在谈论谁应该被允许访问?这个解决方案似乎可以很好地工作。我决定改为创建一个“管理员”用户/组帐户,当您最初打开文件时需要密码。我将指示应清除的任何人修改数据库,以使用此登录ID和我为其设置的密码。
    Forms!Customers.AllowAdditions = True