procedure TLoginfrm.bkOKClick(Sender: TObject);
 begin
  if not StudentDM.LoginADOQR.Active then //如果数据库没有打开,则打开数据库
    StudentDM.LoginADOQR.Active:=true;
  if (not StudentDM.LoginADOQR.Locate('UserID',trim(UserIDEdt.Text),[]))
    or (StudentDM.LoginADOQR.FieldByName('Password').AsString <> Trim(PasswordEdt.Text)) then
    begin
      Edit1.Text:=trim(StudentDM.LoginADOQRUserID.AsString);
      Edit2.Text:=trim(StudentDm.LoginADOQRPassword.AsString);
      Application.MessageBox('账号或密码错误','提示信息',MB_ICONWarning);
      UserIDEdt.SetFocus();
      exit;
    end
  else
    Application.Terminate();
end;
数据表UserID,Password,里面有个用户名和密码都是admin
我做好了一个登陆界面,连接好了数据库,写好了SQL语句,但是不管了账户和密码是否正确总是进入MessageBox模块........Edit1和Edit2是我为了跟踪数据表指针建立的...里面都能读出数据表中的admin
我把这段
or (StudentDM.LoginADOQR.FieldByName('Password').AsString <> Trim(PasswordEdt.Text))
去掉后,在UserIDEdt中输入admin,能正确登陆...经过测试好像就是这句的问题了...但是我觉得这里毫无问题啊?这个是为什么啊?这个是刚才问的时候的帖子
http://community.csdn.net/Expert/topic/5498/5498219.xml?temp=.212826
本以为解决了...可是改了一下试了各种方法,包括顺序查找法都用上了,就是验证了账户以后密码始终得不到验证...借了好多书...都没有看到相关的问题......我郁闷了.....

解决方案 »

  1.   

    if not StudentDM.LoginADOQR.Active then
        StudentDM.LoginADOQR.Active:=true;
      StudentDM.LoginADOQR.First;
      while not StudentDM.LoginADOQR.Eof do
        begin
          if not StudentDM.LoginADOQR.Locate('UserID',trim(UserIDEdt.Text),[])
          then
            begin
            Edit1.Text:=StudentDM.LoginADOQRUserPWD.AsString;
            Application.MessageBox('账号错误','账号错误',MB_ICONWarning);
            isLogin:=false;
            Break;
            end
          else if (StudentDM.LoginADOQR.FieldByName('UserPWD').AsString)=PasswordEdt.Text //StudentDM.LoginADOQRUserPWD.AsString=trim(PasswordEdt.Text)
          then
            begin
            Application.MessageBox('验证','验证',MB_ICONInformation);
            isLogin:=true;
            Break;
            end
          else
            begin
            isLogin:=false;
            Break;
            end;
        end;  if not isLogin then
        Application.MessageBox('账户或密码错误','提示信息',MB_ICONWarning);
    这个是我另外写的一个......使用了各种方法了,这是其中一个调试跟踪的代码........我就是不清楚为什么始终进不到密码验证环节.....始终不能满足密码验证.......
      

  2.   

    你的代码这样写有些不是很清楚,看看下面的能否行得通
    procedure TLoginfrm.bkOKClick(Sender: TObject);
     begin
      if not StudentDM.LoginADOQR.Active then //如果数据库没有打开,则打开数据库
        StudentDM.LoginADOQR.Active:=true;
      if (not StudentDM.LoginADOQR.Locate('UserID',trim(UserIDEdt.Text),[])) then
      begin 
       MessageBox('帐户不存在!');
       UserIDEdit.SetFocus;
       exit;
      end;
      if (StudentDM.LoginADOQR.FieldByName('Password').AsString <> Trim(PasswordEdt.Text)) then
        begin
          Application.MessageBox('密码错误','提示信息',MB_ICONWarning);
          UserIDEdt.SetFocus();
          exit;
        end
      {进入主程序}
    end;
    这个问题不应该这么复杂,如果还是不行你可以不用Locate方法用参数查询来实现,
    设计期设置LoginADOQR的Sql属性为select UserID,passwod From admin where UserID=:userIDprocedure TLoginfrm.bkOKClick(Sender: TObject);
     begin
      if StudentDM.LoginADOQR.Active then 
        StudentDM.LoginADOQR.Active:=false;
      StudentDM.LoginADOQR.Parameters.ParamByName['UserID'].value:=Trim(UserIDEdit.Text);
      StudentDM.LoginADOQR.Open;
      if (StudentDM.LoginADOQR.RecordCount=0) then
      begin 
       MessageBox('帐户不存在!');
       UserIDEdit.SetFocus;
       exit;
      end;
      if (StudentDM.LoginADOQR.FieldByName('Password').AsString <> Trim(PasswordEdt.Text)) then
        begin
          Application.MessageBox('密码错误','提示信息',MB_ICONWarning);
          UserIDEdt.SetFocus();
          exit;
        end
      {进入主程序}
    end;