嵌套if语句异常:数据库密码重置功能中确认密码校验失效
问题分析与修复
你的问题核心在于密码确认检查的顺序逻辑错误,导致验证失效:当前代码先修改了数据库数据集里的密码值,再去检查确认密码是否匹配,即便确认密码不匹配时执行了exit,也可能因数据集的状态问题(比如组件自动提交逻辑)导致修改被意外保存。
修复后的代码
if tblusers.locate('StudentID', sStudentID, []) then begin // 验证原密码是否正确 if soldpass <> tblusers['Password'] then begin ShowMessage('Incorrect Current Password'); Exit; end; // 先检查新密码与确认密码是否一致,这一步必须放在修改数据之前 if snewpass <> sreenter then begin ShowMessage('Re-Enter your Password correctly'); edtreenter.Clear; Exit; end; // 所有验证通过后,再执行密码修改与提交 tblusers.Edit; tblusers['Password'] := snewpass; tblusers.Post; ShowMessage('Password Successfully Changed'); end;
关键调整点
- 把新密码与确认密码的验证逻辑移到
tblusers.Edit操作之前,确保只有验证通过才会触发数据库修改 - 优化原密码验证的代码结构,去掉空的
if分支,让逻辑更直观易读 - 确保所有前置验证完成后,再执行数据修改和提交,避免无效的数据集编辑状态残留
内容的提问来源于stack exchange,提问作者Master Pilot G4 MPG4
相关产品推荐
相关产品推荐

