Delphi的密码修改,原密码、新密码、确认密码,帮我看看下面的代码,密码修改没有效果啊,哪里出问题了,

大虾也麻烦帮我加个验证空白项的功能吧,我写不完全,头脑好乱,还要加什么数据库控件吗,如ADOQuery控件什么的。
procedure TForm11.Button1Click(Sender: TObject);
var
uname,oldpass,newpass,newp,sqlstr:string;
begin
uname:=trim(user_name);
oldpass:=trim(edit1.Text);
newpass:=trim(edit2.Text);
newp:=trim(edit3.Text);
if(newpass<>newp)then
begin
showmessage('确认密码与新密码不符合,请重新输入!');
edit2.Clear;
edit3.Clear;
exit;
end;
sqlstr:='select * from admin where (user_name="'+uname+
'") and (user_pass="'+Encrypt(oldpass)+'")';
with TADOQuery.Create(nil) do
try
Connection:=Form2.ADOConnection1;
Close;
sql.Clear;
sql.Add(sqlstr);
open;
if recordcount<0 then
begin
Messagebox(0,'原密码错误!修改失败!','错误', MB_OK or MB_ICONERROR);
password.Form11.Close ;
end
else
begin
sqlstr:='update admin set user_pass="'+Encrypt(newp)+
'" where (user_name="'+uname+'")';
sql.Clear;
sql.Add(sqlstr);
Execsql;
ShowMessage('密码修改成功!');
password.Form11.Close;
end;
finally
free;
end;
end;

if recordcount<0 then ?? recordcount最小也就是0

你open 以后

一直open着

应该在以下代码之前加close
sql.Clear;
sql.Add(sqlstr);

至于空白项 你就在ado组件栏
拖TAdoQuery就可以了(看你代码 反正在Form2上有ADOConnection1 )
点击你所用的Form2.ADOConnection1 ConnectionString属性 配置连接数据库的连接
设置Form2.ADOConnection1的loginprompt为false
设置AdoQuery1的Connection为 Form2.ADOConnection1
就行了
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-04-25
一个ADOQuery组件,拖一个上去,也占用不了多少资源,确偏偏要去TADOQuery.Create(nil),走都没有走会,就想学大师去飞。
你在检测两次输入密码是否相符之后,并没有保存修改的密码,就去用 recordcount<0检测,不知道是何意义。
这种修改密码的活,用一个事件是解决不了的。首先是检查原密码是否正确,如果不正确就不能输入新密码,阻止修改的办法是让保存按钮失效,或者让新密码输入框不能写入数据,原密码的正确性可在原密码输入框的退出事件中检测。
新密码一般输入两次,其作用是让用户记住新密码。二次输入相符性,可在第二次密码输入框中的退出事件中进行检测。检测正确就让保存按钮激活。
在保存按钮的单击事件中,保存修改后的密码。只要有保存数据的操作,一般是不需要再进行检测的,保存成功,修改就成功。
软件的登录密码,第一,在数据库中,要有一张表或者在某一张表中有记录专门来保存用户名称和登录密码。第二,可以用一个TADO数据集组件(可以是专用的,也可以是兼用的)来负责存取用户名和密码;第三,得有一个界面来进行专门的维护(你已经有了);第四,这个界面,几乎每一个控件都要写一到二个事件的代码,每一段代码都有自己独特的任务。第一个框,在退出事件中,验证原密码输入的正确性,如果不正确,就一、不让第二个框可编辑字符,二、不让保存按钮有效。第二个框退出时提示一下输入的字符。第三个框退出时检测一下二框与三框输入的字符是否相符,如果相符,就让保存按钮有效。保存按钮单击,保存修改。保存修改完成后,提示一下新密码是那些字符。
TADO数据集组件有二个作用,根据登录用户名,在数据库中提取原密码,提取之后,保存到一个变量中,然后用这个变量去与输入的原密码比较。第二个作用是保存修改的密码。你刚开始学,建议用一个ADO数据集组件来专门搞这事,学会之后,再搞兼用,所谓兼用,就是一个TADO数据组件,完成很多表的数据存取。老手们一般一个软件,只用三四个数据集组件,新手往往用几十个。大师们一般都是临时创建,用完之后就FREE掉。
第2个回答  2013-04-25
你先试试的sql语句是不是有问题,然后再看你的代码
第3个回答  2013-04-25
if recordcount<0改成 if recordcount<=0就可以解决了吧
相似回答