1

我在 Access Project 工作,但我认为这个问题中没有任何特定于 Access 的内容。

我有一个表单,只有当您在经过身份验证的用户表中时才能打开它(并且我通过他的 Windows 用户名对用户进行身份验证) - 我知道这是蹩脚的身份验证。

这是我放入表单打开事件的代码:

Private Sub Form_Open(Cancel As Integer)

If DCount("User_Id", "Users", "[username]='" & (Environ$("Username")) & "'") Then

Else
    MsgBox "Access Denied!"
    DoCmd.Quit

End If

End Sub 

我想要完成的是,当MsgBox "Access Denied!"显示时,如果我在单击确定按钮之前输入某个单词(密码),DoCmd.Quit则不会执行。我不想显示任何内容,只需输入密码即可。

我并不迫切需要这个,我只是想让它变得有趣。而且我认为如果可以使用 VBA,那将是非常酷的。

4

2 回答 2

1

我在 Access 2007 中对此进行了测试,我认为逻辑是你想要的,或者至少它很接近。请考虑使用类似WindowsUser()下面的函数来获取 Windows 用户名。我知道这只是为了好玩,所以你现在不在乎。但是,对于您将来关心的任何事情,请记住这一点。 Environ("USERNAME")作为一种安全措施很容易被击败。

Const cstrYourPassword As String = "let me in"
Dim blnGoodbye As Boolean
Dim lngButtons As Long
Dim strPrompt As String
Dim strPassword As String

strPrompt = "Access Denied!" & vbCrLf & vbCrLf & _
    "Click Retry to try with password" & vbCrLf & _
    "or Cancel to quit."
lngButtons = vbCritical + vbRetryCancel
If MsgBox(strPrompt, lngButtons) = vbRetry Then
    strPassword = InputBox("Password:")
    If strPassword = cstrYourPassword Then
        MsgBox "Welcome " & WindowsUser
    Else
        blnGoodbye = True
    End If
Else
    blnGoodbye = True
End If

If blnGoodbye = True Then
    MsgBox "That's all folks."
    'DoCmd.Quit ' <- enable this when ready.
End If

使用它而不是Environ("USERNAME").

Public Function WindowsUser() As String
    Static strUserName As String

    If Len(strUserName) = 0 Then
        strUserName = CreateObject("WScript.Network").Username
    End If
    WindowsUser = strUserName
End Function
于 2013-08-18T21:31:23.820 回答
0

以下应该可以工作,但您可能需要修改它以将密码设置为更好的密码,或者如果您需要多个密码。任何知道如何阅读代码的人也可以找到密码,所以也许将它放在数据库中的某个地方会更好?

Const sPassword As String = "PASSWORD"
Const sMESSAGE As String = "Please enter your password"
Const sTITLE As String = "Enter Password"
Dim sInput As String

sInput = InputBox(sMESSAGE, sTITLE)

If sInput <> Password Then
    MsgBox "Access Denied!"
    DoCmd.Quit
End If
于 2013-08-18T21:14:33.320 回答