如何验证用户输入的密码跟数据库(MSSQL)里的相不相同?

时间:2022-10-04 17:12:54
我试过将一个密码存入MSSQL,再用ADOQuery读出来比较,但不知道应该怎么比较,我用==,或者AnsiCompare比较都不行,请指教.

11 个解决方案

#1


AnsiString userPW;
userPW=Edit1->Text;
if(userPW==ADOQuery1->FieldByName("密码")->Value)
{...}
应该可以啊?

#2


把你的代码贴出来,还有你的数据结构,不然不好知道你的问题在哪儿?

#3


以下是我的代码,已经测试过可以select出有关记录,就是对比不成功.
初学C++,代码很不规范,望指正.

void __fastcall TForm2::Button1Click(TObject *Sender)
{
   //考生登录
   Form2->ADOConnection1->Connected=true;

   AnsiString sql="";
   sql ="Select * from student where stu_code=";
   sql += MaskEdit1->Text;
   ADOQuery1->SQL->Clear();
   ADOQuery1->SQL->Add(sql);
   ADOQuery1->Active=true;
   ADOQuery1->Open();

   tmp_name=ADOQuery1->FieldByName("stu_name")->Value;
   tmp_pwd=ADOQuery1->FieldByName("stu_pwd")->Value;
   Form1->name=tmp_name;
   Form1->code=MaskEdit1->Text;
   if(tmp_name==Edit1->Text&&tmp_pwd==MaskEdit1->Text)
   {
     login = 1;
   }
   else {login=0;}
   ShowMessage(login); //无论输入里否正确,login都是等于0
}

#4


表中的stu_pwd字段为char(20).

#5


if(Trim(tmp_name)==Trim(Edit1->Text) && Trim(tmp_pwd)==Trim(MaskEdit1->Text))
或是修改sql语句:
sql ="Select rtrim(stu_name),rtrim(stu_pwd) from student where stu_code=";
或是修改数据表结构:交char型改为varchar型就不会有空格的问题了

  

#6


搞定了.原来是我搞错了,输入密码是应该是Edit2,而不是MaskEdit1.
多谢两位帮忙!我迟点结帖.

随便问问叶子(其他人有经验也可以说说).学习BCB应该主意什么?
怎样才能写个好的程序出来?

#7


哈哈!
多做项目,如此而已!

#8


呵呵,多向叶子这样的星星们学习。
(嘿嘿,拍拍马屁~)

#9


呵呵~在学了.不过像一只没头的苍蝇,在周围乱飞呢~

有什么项目不难又可以讲到东西的?我在试做一个考试系统.不过就上面一点点就卡了我半天,哈哈.

是啦,如果我向BCB方向发展不知会不会很难找到一条好的出路?J2EE会好点吗?

#10


Form2->ADOConnection1->Connected=true;
   AnsiString sql="";
   sql ="Select * from student where stu_code=";
   sql += MaskEdit1->Text;
   ADOQuery1->Close();//前面Open是否关闭;
   ADOQuery1->SQL->Clear();
   ADOQuery1->SQL->Add(sql);
   ADOQuery1->Active=true;//无需,Open方法已经激活;
   ADOQuery1->Open();

   tmp_name=ADOQuery1->FieldByName("stu_name")->Value;
   tmp_pwd=ADOQuery1->FieldByName("stu_pwd")->Value;
   ADOQuery1->Close();//记住关闭select数据集;
   Form1->name=tmp_name;
   Form1->code=MaskEdit1->Text;
   if(tmp_name==Edit1->Text&&tmp_pwd==MaskEdit1->Text)
   {
     login = 1;
   }
   else {login=0;}
   ShowMessage(login); //无论输入里否正确,login都是等于0

#11


AnsiString userPW;
userPW=Edit1->Text.Trim();
if(userPW==ADOQuery1->FieldByName("密码")->AsString.Trim())
{...}
试试,两头去空格,不然你从数据库里读出来的密码是“密码        ”(一共你设计的位数);

#1


AnsiString userPW;
userPW=Edit1->Text;
if(userPW==ADOQuery1->FieldByName("密码")->Value)
{...}
应该可以啊?

#2


把你的代码贴出来,还有你的数据结构,不然不好知道你的问题在哪儿?

#3


以下是我的代码,已经测试过可以select出有关记录,就是对比不成功.
初学C++,代码很不规范,望指正.

void __fastcall TForm2::Button1Click(TObject *Sender)
{
   //考生登录
   Form2->ADOConnection1->Connected=true;

   AnsiString sql="";
   sql ="Select * from student where stu_code=";
   sql += MaskEdit1->Text;
   ADOQuery1->SQL->Clear();
   ADOQuery1->SQL->Add(sql);
   ADOQuery1->Active=true;
   ADOQuery1->Open();

   tmp_name=ADOQuery1->FieldByName("stu_name")->Value;
   tmp_pwd=ADOQuery1->FieldByName("stu_pwd")->Value;
   Form1->name=tmp_name;
   Form1->code=MaskEdit1->Text;
   if(tmp_name==Edit1->Text&&tmp_pwd==MaskEdit1->Text)
   {
     login = 1;
   }
   else {login=0;}
   ShowMessage(login); //无论输入里否正确,login都是等于0
}

#4


表中的stu_pwd字段为char(20).

#5


if(Trim(tmp_name)==Trim(Edit1->Text) && Trim(tmp_pwd)==Trim(MaskEdit1->Text))
或是修改sql语句:
sql ="Select rtrim(stu_name),rtrim(stu_pwd) from student where stu_code=";
或是修改数据表结构:交char型改为varchar型就不会有空格的问题了

  

#6


搞定了.原来是我搞错了,输入密码是应该是Edit2,而不是MaskEdit1.
多谢两位帮忙!我迟点结帖.

随便问问叶子(其他人有经验也可以说说).学习BCB应该主意什么?
怎样才能写个好的程序出来?

#7


哈哈!
多做项目,如此而已!

#8


呵呵,多向叶子这样的星星们学习。
(嘿嘿,拍拍马屁~)

#9


呵呵~在学了.不过像一只没头的苍蝇,在周围乱飞呢~

有什么项目不难又可以讲到东西的?我在试做一个考试系统.不过就上面一点点就卡了我半天,哈哈.

是啦,如果我向BCB方向发展不知会不会很难找到一条好的出路?J2EE会好点吗?

#10


Form2->ADOConnection1->Connected=true;
   AnsiString sql="";
   sql ="Select * from student where stu_code=";
   sql += MaskEdit1->Text;
   ADOQuery1->Close();//前面Open是否关闭;
   ADOQuery1->SQL->Clear();
   ADOQuery1->SQL->Add(sql);
   ADOQuery1->Active=true;//无需,Open方法已经激活;
   ADOQuery1->Open();

   tmp_name=ADOQuery1->FieldByName("stu_name")->Value;
   tmp_pwd=ADOQuery1->FieldByName("stu_pwd")->Value;
   ADOQuery1->Close();//记住关闭select数据集;
   Form1->name=tmp_name;
   Form1->code=MaskEdit1->Text;
   if(tmp_name==Edit1->Text&&tmp_pwd==MaskEdit1->Text)
   {
     login = 1;
   }
   else {login=0;}
   ShowMessage(login); //无论输入里否正确,login都是等于0

#11


AnsiString userPW;
userPW=Edit1->Text.Trim();
if(userPW==ADOQuery1->FieldByName("密码")->AsString.Trim())
{...}
试试,两头去空格,不然你从数据库里读出来的密码是“密码        ”(一共你设计的位数);