Vba MSAccess登录表单

Vba MSAccess登录表单,vba,ms-access,Vba,Ms Access,我创建了一个登录表单,但意识到我可以不用输入密码登录。只有一个用户名。我应该怎么做才能解决这个问题 Option Compare Database Option Explicit Private Sub cmdlogin_Click() Dim rs As Recordset Set rs = CurrentDb.OpenRecordset("Account Details", dbOpenSnapshot, dbReadOnly) rs.Find

我创建了一个登录表单,但意识到我可以不用输入密码登录。只有一个用户名。我应该怎么做才能解决这个问题

Option Compare Database
Option Explicit

Private Sub cmdlogin_Click()
    Dim rs As Recordset

    Set rs = CurrentDb.OpenRecordset("Account Details", dbOpenSnapshot, dbReadOnly)
    rs.FindFirst "UserName='" & Me.txtusername & "' "
    
    Me.lblusername.Visible = False
    If rs.NoMatch = True Then
        Me.lblusername.Visible = True
        Me.txtusername.SetFocus
        Exit Sub
    End If
    Me.lblpassword.Visible = False
    If rs!Password <> Me.txtpassword Then
        Me.lblpassword.Visible = True
        Me.txtpassword.SetFocus
        Exit Sub
    End If
      DoCmd.OpenForm "Dashboard"
      DoCmd.Close acForm, Me.Name
    
End Sub
选项比较数据库
选项显式
私有子cmdlogin_Click()
将遥感器作为记录集
Set rs=CurrentDb.OpenRecordset(“帐户详细信息”,dbOpenSnapshot,dbReadOnly)
rs.FindFirst“UserName=”&Me.txtusername&“
Me.lblusername.Visible=False
如果rs.NoMatch=True,则
Me.lblusername.Visible=真
Me.txtusername.SetFocus
出口接头
如果结束
Me.lblpassword.Visible=False
如果是的话!密码Me.txtpassword然后
Me.lblpassword.Visible=True
Me.txtpassword.SetFocus
出口接头
如果结束
DoCmd.OpenForm“仪表板”
DoCmd.Close acForm,Me.Name
端接头

如果txtsername或txtpassword为Null,则条件将失败。尝试:

rs.FindFirst“UserName=”&Nz(Me.txtusername,”&“””

If-rs!密码Nz(Me.txtpassword,“”),然后

或者考虑:

    Dim rs As Recordset
    With Me
    .lblusername.Visible = False
    .lblpassword.Visible = False
    If IsNull(.txtusername) Or IsNull(.txtpassword) Then
        MsgBox "Enter username or password"
    Else
        Set rs = CurrentDb.OpenRecordset("SELECT UserName, Password FROM [Account Details] " & _
             "WHERE UserName='" & .txtusername & "'", dbOpenSnapshot, dbReadOnly)
        If Not rs.BOF And Not rs.EOF Then
            If rs!Password <> .txtpassword Then
                .lblpassword.Visible = True
                .txtpassword.SetFocus
            Else
                DoCmd.OpenForm "Dashboard"
                DoCmd.Close acForm, .Name
            End If
        Else
            .lblusername.Visible = True    
            .txtusername.SetFocus
        End If
    End If
    End With
Dim rs作为记录集
和我一起
.lblusername.Visible=False
.lblpassword.Visible=False
如果为IsNull(.txtsername)或IsNull(.txtspassword),则
MsgBox“输入用户名或密码”
其他的
Set rs=CurrentDb.OpenRecordset(“从[帐户详细信息]中选择用户名、密码”&_
“其中用户名=”&.txtusername&“”,dbOpenSnapshot,dbReadOnly)
如果不是rs.BOF和rs.EOF,则
如果是的话!密码。然后是TXT密码
.lblpassword.Visible=True
.txtpassword.SetFocus
其他的
DoCmd.OpenForm“仪表板”
DoCmd.Close acForm.Name
如果结束
其他的
.lblusername.Visible=True
.txtusername.SetFocus
如果结束
如果结束
以

不要尝试在VBA中建立登录系统。从安全的角度来看,绕开它是微不足道的,从用户的角度来看,这是不必要的麻烦。用户已经登录到windows,我们知道您将无法拥有比此更安全的登录系统。只需从Windows中提取用户名,然后使用它执行任何特定于用户的操作。示例:
userName=Environ(“userName”)
基本上同意@HackSlash。我使用Environ提取用户名,并使用它从Users表中获取记录。若找不到用户,我就假定他们是新的有效用户,并添加一条记录。我们在一些记录中保存了用户的姓名首字母,所以要求新用户提供姓名首字母作为记录(非常小的办公室)。他们再也看不到“登录”表单了。用户表定义了访问某些表单和/或按钮的用户权限级别。