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の 3 番目の引数であるcriteriaは、オプションの文字列式で、"WHERE という単語を除いた SQL 式の WHERE 句"に似ています。

あなたのものでは、という名前のコントロールの値を与えようとしているようですinuser。ただし、実際にはテキスト"inuser.Value"を含む文字列を渡しています。

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

ただし、引用符を削除しても、必要なものは得られません。

あるフィールド (おそらく) が一致する場所cusernameから検索したい場合は...tbl_usersuser_idinuser.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 に答える