2016-09-29 11 views
0

データベースへのユーザーアクセスを制御するために使用する予定のログインフォームがあります。私はユーザーのパスワード= "パスワード"で初期化し、最初のログイン時にパスワードを変更するようにユーザーに求めます。 ユーザーの資格情報を格納するユーザーテーブルを更新するのが難しいです。アクセスログインフォームパスワードの変更と更新:SQL/VBA

普通のログインVBAがfrm_Loginに関連付けられています。パスワードは、「パスワード」(だけでなく、ユーザの要求の変化を含めるには、この時に拡大する計画)である場合

Option Compare Database 
Option Explicit 

Private Sub btnLogin_Click() 
    Dim rs As Recordset 

Set rs = CurrentDb.OpenRecordset("X_tblUsers", dbOpenSnapshot, dbReadOnly) 

rs.FindFirst "UserName='" & Me.txtUserName & "'" 

If rs.NoMatch Then 
    Me.lblWrongUser.Visible = True 
    Me.txtUserName.SetFocus 
    Exit Sub 
End If 
Me.lblWrongUser.Visible = False 

If rs!Password <> Nz(Me.txtPassword, "") Then 
    Me.lblWrongPass.Visible = True 
    Me.txtPassword.SetFocus 
    Exit Sub 
End If 
Me.lblWrongPass.Visible = False 

TempVars("UserName").Value = Me.txtUserName.Value 

If Me.txtPassword = "password" Then 
    DoCmd.OpenForm "frm_PassChange" 
End If 

If rs!UserType = 3 Then 
    Dim prop As Property 
    On Error GoTo SetProperty 
    Set prop = CurrentDb.CreateProperty("AllowBypassKey", dbBoolean, False) 

    CurrentDb.Properties.Append prop 

SetProperty: 
    If MsgBox("Turn on Bypass key?", vbYesNo, "Allow Bypass") = vbYes Then 
     CurrentDb.Properties("AllowByPassKey") = True 
    Else 
     CurrentDb.Properties("AllowByPassKey") = False 
    End If 

End If 

Me.Visible = False 
Globals.Logging "Logon" 

DoCmd.OpenForm "frm_Main" 

End Sub 

フォームfrm_PassChangeが起動します。この形式では、私は、ユーザーが確認のために新しいパスワードの2倍を入力し、新しいパスワードを使用してUSERTABLEを更新する必要がありますが、これは動作していない:

Private Sub btnChangePass_Click() 
Dim rs As Recordset 

Set rs = CurrentDb.OpenRecordset("X_tblUsers") 

If Me.txtNewPass <> Me.txtNPConfirm Then 
    Me.lblPassMismatch.Visible = True 
    Me.txtNewPass.SetFocus 
    Exit Sub 
End If 
Me.lblPassMismatch.Visible = False 

TempVars("Password").Value = Me.txtNewPass.Value 

CurrentDb.Execute "Update X_tblUsers SET X_tblUsers.Password = Value(" & Me.txtNewPass.Value & ")" 

Me.Visible = False 
Globals.Logging "PWChange" 

End Sub 

私はきちんとUSERTABLE更新を実行するにはどうすればよいですか?それにはいくつかの問題があります

+0

に関係なく、それらのどれもシフトキーをバイパスできないようにする必要があります:) :)それらに制御されたアクセス権をフルアクセスで与えないでください! –

答えて

0
CurrentDb.Execute 
    "Update X_tblUsers SET X_tblUsers.Password = Value(" & Me.txtNewPass.Value & ")" 

(私はこれまでのところ入手助けるためにスティーブ・ビショップへTKS):

  • Value()が属していないが
  • パスワードは、文字列がありますだからあなたはそれを引用する必要があります:
    "Update X_tblUsers SET X_tblUsers.Password = '" & Me.txtNewPass.Value & "'"
  • パスワードには引用符が含まれていますので、
    "Update X_tblUsers SET X_tblUsers.Password = '" & Replace(Me.txtNewPass.Value, "'", "''") & "'"
  • おめでとうございます!すべてのユーザーのパスワードを変更しました!
    "... WHERE UserName='" & theUserName & "'"

はまた、プレーンテキストとしてパスワードを保存することは本当に悪いであることに注意してください:あなたは、WHERE句を必要としています。パスワードハッシュについてお読みください。

パラメータ化されたクエリについて。

関連する問題