4

我想制作一个登录表单,但我不知道如何使用登录按钮中的 DLookup 获取或确认我在用户名和密码文本框中输入的内容是否在我的表格中。

这是我当前的代码:

Dim u As Variant
Dim p As Variant
Dim inu As String
Dim inp As String

u = DLookup("cusername", "tbl_users", "inuser.Value")
p = DLookup("cpassword", "tbl_users", "inpass.Value")

inu = inuser.Value
inp = inpass.Value

If inu = u And inp = p Then
DoCmd.OpenForm "frm_userlog"
MsgBox "Welcome " & tuser & "!"

ElseIf IsNull(Me.inuser.Value) And inpass.Value = 1 Then
MsgBox "You must input a username"

ElseIf IsNull(Me.inpass.Value) And inuser.Value = 1 Then
MsgBox "you must input a password"

ElseIf IsNull(Me.inuser.Value) And IsNull(Me.inpass.Value) Then
MsgBox "you must input a username and password"

Else
MsgBox "The username or password you entered is invalid"
    End If
End Sub
4

2 回答 2

3

第三个DLookup参数,criteria是一个可选的字符串表达式,它类似于SQL 表达式中的“WHERE 子句,没有单词 WHERE”

在你的,你似乎试图给它一个名为的控件的值inuser。但是,您实际上传递的是一个包含文本"inuser.Value"的字符串。

DLookup("cusername", "tbl_users", "inuser.Value")

但即使您删除引号,这也不会给您想要的东西。

如果您想cusernametbl_users某个字段(可能user_id)匹配的位置查找inuser.Value...

DLookup("cusername", "tbl_users", "user_id = " & inuser.Value)

如果该字段 ,user_id是文本而不是数字数据类型,则在条件字符串中添加引号 ...

DLookup("cusername", "tbl_users", "user_id = '" & inuser.Value & "'")

在我看来,您与 的问题相同DLookup("cpassword", ...),因此,如果我的第一个问题是正确的,请在此处进行类似的更改。

您可以在 Access 2000中的 DLookup() 用法、示例和故障排除说明中找到更多信息DLookup。虽然这是一篇旧文章,但一切仍然适用于最近的 Access 版本 AFAICT。

于 2013-05-19T19:52:52.730 回答
0

根据我的评论,我使用这个:

Private Sub cmdlogin_Click()
    If IsNull(Me.cb_user) Then
        MsgBox "You didn't select a user", vbCritical, "Error"
        Me.cb_user.SetFocus
        Exit Sub
    Else
        If IsNull(Me.txtpass) Then
            MsgBox "You didn't enter a password", vbCritical, "Error"
            Me.txtpass.SetFocus
            Exit Sub
        Else
            If encrypt(Me.txtpass.Value) = DLookup("password", "users", "user_id = " & Me.cb_user.Value) Then
                DoCmd.OpenForm ("home")
                Me.Visible = False
            Else
                MsgBox "Incorrect password. Please try again", vbCritical, "Incorrect password"
                Me.txtpass = Null
                Me.txtpass.SetFocus
            End If
        End If
    End If
End Sub

cb_user用户名组合框在哪里。

Encrypt是我放置在模块中的基本 ROT 13 加密:

Public Function encrypt(strInput As String)
    Dim n As Integer, i As Integer
    n = 13
    For i = 1 To Len(strInput)
        Mid(strInput, i, 1) = Chr(Asc(Mid(strInput, i, 1)) + n)
    Next i
    encrypt = strInput
End Function

如果不需要,请省略encrpyt密码查找的环绕,这样:

If encrypt(Me.txtpass.Value) = DLookup("password", "users", "user_id = " & Me.cb_user.Value) Then

变成

If Me.txtpass.Value = DLookup("password", "users", "user_id = " & Me.cb_user.Value) Then
于 2013-05-20T07:49:38.010 回答