0

vb6 ログイン メソッドをコーディングしようとすると、そのエラーが発生します。すべてのレコードセットを確認しましたが、開いているレコードセットが表示されません。このエラーが発生するのはなぜですか? このログイン プログラムのロジックは、ユーザーがテキスト フィールドにユーザー名とパスワードを入力すると、データベース (ms アクセス) の値に基づいて正しいかどうかを確認し、無効なユーザー名とパスワードを入力した場合はプログラムを終了するというものです。プログラムを試してみると、正しいユーザー名とパスワードで動作していますが、3回エラー入力をしようとすると、無効な入力の2回目の試行でそのエラーが発生します。

誰かが私を助けることができますか?

これが私のコードです:

Dim Con As New ADODB.Connection
Dim Rs As New ADODB.Recordset
Dim Rs2 As New ADODB.Recordset
Dim ctr As Integer
Dim cmdCommand As New ADODB.Command
Dim have As Integer
Dim Username As String
Dim Password As String

Private Sub cmdLogin_Click()
  If ctr <> 3 Then
    If txtUsername.Text = Username And txtPassword.Text = Password Then
      MsgBox "Login Successful!!"
      MDIForm1.Show
      Unload Me
    ElseIf txtUsername.Text <> Username And txtPassword.Text <> Password Then
      MsgBox "Invalid Log in!"
      txtUsername.Text = ""
      txtPassword.Text = ""
      txtUsername.SetFocus
    ElseIf txtUsername.Text <> Username And txtPassword.Text = Password Then
      MsgBox "Invalid Log in!"
      txtUsername.Text = ""
      txtPassword.Text = ""
      txtUsername.SetFocus
    ElseIf txtUsername.Text = Username And txtPassword.Text <> Password Then
      MsgBox "Invalid Log in!"
      txtUsername.Text = ""
      txtPassword.Text = ""
      txtUsername.SetFocus
    ElseIf txtUsername.Text = "" And txtPassword.Text = "" Then
      MsgBox "Invalid Log in!"
      txtUsername.Text = ""
      txtPassword.Text = ""
      txtUsername.SetFocus
    Else
      txtUsername.Text = ""
      txtPassword.Text = ""
      txtUsername.SetFocus
    End If
    ctr = ctr + 1
  Else
    MsgBox "You are not a valid user! The Program will be terminated"
    End
  End If
End Sub

Private Sub Form_Load()
  Call OpenConnection

  With Rs
    .ActiveConnection = Con
    .CursorType = adOpenDynamic
    .CursorLocation = adUseClient
    .LockType = adLockOptimistic
  End With
End Sub

Private Sub OpenConnection()
  If Con.State = 1 Then
    Con.Close
  End If
  Set Con = New ADODB.Connection
  Con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;DataSource=C:\Users\User\Documents\dbMMM.accdb;Persist Security Info=False;"
  Con.Open
End Sub

Private Sub txtUsername_LostFocus()
  With Rs2
    .ActiveConnection = Con
    .Source = "Select * From tblUser where UserName = '" & txtUsername.Text & "' "       'The highlight of my error is in this line
    .CursorType = adOpenDynamic
    .CursorLocation = adUseClient
    .LockType = adLockOptimistic
    .Open
    have = 0
    If Rs2.EOF = False Then
      Rs2.MoveFirst
      Do
        Username = Rs2.Fields(0)
        Password = Rs2.Fields(1)
        Rs2.MoveNext
      Loop Until Rs2.EOF = True
      Rs2.Close
    End If
  End With
End Sub
4

1 に答える 1

1

ユーザー_LostFocus名に一致するものがない場合、コードはレコードセットを開いたままにします。(これにより、コードが適切にインデントされたため、はるかに明確になりました)

これを処理するためのはるかに優れた方法は、ログインボタンが押されたときに単一のチェックを実行して、ユーザーを検索してから手動でパスワードを比較するのではなく、ユーザー名とパスワードの両方に一致するレコードがあるかどうかを確認することです。

With Rs2
  .ActiveConnection = Con
  .Source = "Select * From tblUser where UserName = '" & Replace(txtUsername.Text, "'", "''") & "' AND Password = '" & Replace(txtPassword.Text, "'", "''") & "';"
  .CursorType = adOpenDynamic
  .CursorLocation = adUseClient
  .LockType = adLockOptimistic
  .Open
  LoginValid = Not .EOF
  .Close
End With
于 2013-03-06T10:59:23.520 に答える