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