使用CurrentDb.Execute strSQL无法将新用户输入更新到数据表
问题解决步骤
1. 修复SQL语句的语法错误
你的UPDATE语句存在两个致命语法问题:
- UPDATE中多个字段更新只需要写一次SET,字段之间用逗号分隔即可,你重复写了两次
SET,直接导致SQL执行失败。 - 字符串拼接的引号逻辑混乱:布尔型字段
pupreq不需要加引号,密码字段的引号嵌套也出现了多余层级。
修正后的SQL拼接代码:
strSQL = "UPDATE users " & _ "SET password = '" & PWord1 & "', " & _ "pupreq = False " & _ "WHERE Username = '" & TempVars("UserNameTemp") & "'"
注:strRST=0可以直接换成False,Access中布尔型字段存储值为-1(True)和0(False),写False更直观易懂。
2. 调整验证逻辑的顺序
你当前是先拼接SQL再做密码验证,属于无效操作。正确逻辑应该是先完成所有验证步骤,确认无误后再拼接SQL并执行:
Private Sub UpDate_Click() Dim strSQL As String '设置焦点 PWord2.SetFocus '若PWord1为空的处理 If IsNull(PWord1) Then MsgBox "PassWord 1 Missing" Exit Sub End If '若PWord2为空的处理 If IsNull(PWord2) Then MsgBox "PassWord 2 Missing" Exit Sub End If '若PWord1与PWord2不匹配的处理 If PWord1 <> PWord2 Then MsgBox "PassWords do not Match" Exit Sub End If '验证通过后拼接SQL strSQL = "UPDATE users " & _ "SET password = '" & PWord1 & "', " & _ "pupreq = False " & _ "WHERE Username = '" & TempVars("UserNameTemp") & "'" '执行更新时建议加上dbFailOnError参数,方便捕获执行错误 CurrentDb.Execute strSQL, dbFailOnError '跳转到登录界面 DoCmd.OpenForm "LogOnScreen" '关闭当前更新密码窗口 Me.Visible = False End Sub
3. 额外优化建议(避免SQL注入)
直接拼接用户输入的字符串到SQL中存在SQL注入风险,新手可以逐步学习使用参数化查询,既安全又不用纠结引号嵌套问题:
Private Sub UpDate_Click() Dim qd As QueryDef Dim strSQL As String '验证步骤同上,省略... '参数化SQL模板 strSQL = "UPDATE users SET password = [@NewPwd], pupreq = False WHERE Username = [@UserName]" Set qd = CurrentDb.CreateQueryDef("", strSQL) '给参数赋值 qd.Parameters("@NewPwd") = PWord1 qd.Parameters("@UserName") = TempVars("UserNameTemp") '执行更新 qd.Execute dbFailOnError Set qd = Nothing '后续界面跳转代码同上 End Sub
内容的提问来源于stack exchange,提问作者Helspont666
相关产品推荐
相关产品推荐

