这种登录在VBA中是否可行?

时间:2013-08-18 16:57:43

标签: vba ms-access access-vba

我在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那将会非常酷。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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