procedure TLoadForm.btnOkClick(Sender: TObject);
var UserId:string;
    UserPassword:string;
begin 
if editUserID.Text='' then
     EditUserID.SetFocus
else
   begin
       UserId:=EditUserID.Text;
       UserPassword:=EditPwd.Text;
       query1.Close;
       query1.SQL.Clear;
       query1.SQL.Add('select *');
       query1.SQL.Add('from ''User1.db'' User1');
       query1.SQL.Add('where User1.UserId=:ParamsUserId');
       query1.SQL.Add('and User1.UserPassword=:ParamsUserPassword');
       query1.parambyname('ParamsUserId').Asstring:=UserId;
       query1.parambyname('ParamsUserPassword').Asstring:=UserPassword;
       query1.Prepare;
       query1.Open;
   if (query1.RecordCount<>1) or
   (EditPwd.Text<>query1.FieldValues['UserPassword']) then
     begin
      showmessage('密码或用户标识不对,请检查!') ;
      EditUserID.text:='';
      EditPwd.Text:='';
      EditUserID.SetFocus;
      主表单名.close;//在这里加一句
      end                    else     begin
      if query1.FieldValues['UserStatus']='管理员' then
          begin
           
           end;        
       if query1.FieldValues['UserStatus']='保管员' then
          begin
       
          end;
       if query1.FieldValues['UserStatus']='普通借用人' then
          begin          end;   end;
    end;
  end;

解决方案 »

  1.   

    我也碰到过,是btnOk(确定按钮)的modalresult的初始值要设为mrNone,检验通过则为mrOk,否则mrCancel。
    主表单里: if LoadForm.showmodal=mrOK then Application.Run;
      

  2.   

    谢谢各位,但我这个与其他有不同,因为我的登陆界面是主窗体的一部分,如果加一个MainForm.close就等于说自己把自己关掉了,所以出错了。
      

  3.   

    用exit或者是break终止程序的执行
      

  4.   

    同意 bobcnb() ,
    主要是对话框的确定按钮缺省是关闭父窗口的...
    自己放一个确定按钮,登陆成功才close登陆窗口,
    失败不要close即可.......我就是这样做的