我做了一个迷你型小数据库,但是登陆窗口部分不能正常运行:无论登陆密码正确与否,软件都能进入主界面。请详细一点。谢谢!!!
我的代码是这样的:
procedure TOKBottomDlg.OKBtnClick(Sender: TObject);
var
  edityhm,editmn,yhm,mn:string;
begin
edityhm:=trim(edit1.Text);
editmn:=trim(edit2.Text);
with txl_data.Data_txl.ADOQuery1 do      begin
      close;
      Data_txl.ADOQuery1.SQL.Clear;
      Data_txl.ADOQuery1.SQL.Add('select yhm,mn from yhmn');
      data_txl.ADOQuery1.Open;
      execsql;
      end;
      yhm:= data_txl.ADOQuery1.FieldValues['yhm'];
      mn:= data_txl.ADOQuery1.FieldValues['mn'];      if (edityhm=yhm)and(editmn=mn) then
      begin
       dialog.OKBottomDlg.Close
      end
     else
        begin
        label3.Visible:=true;
        label3.Caption:='错误的用户名或密码,您无法使用本系统!';
        end;end;

解决方案 »

  1.   

    把程序的第一个窗口定义为登陆窗口
    通过认证  Tfrom1.show
    不通过 报错
      

  2.   

    工程文件中先加入以下代码
    Application.Initialize;
      Application.CreateForm(Tw_main, w_main);
      Application.CreateForm(TData1, Data1);
      try
        Application.CreateForm(Tw_login, w_login);
        if w_login.ShowModal = 1 then
          begin
            w_login.Free;
            Application.Run ;
          end  ;    except
      end;
      if suecced= false then exit
      else
       Application.CreateForm(Tw_login, w_login);
      Application.Run;登陆窗口代码,先建一个全局变量suecced:boolean;
    procedure Tw_login.suiButton1Click(Sender: TObject);
    var
      str,str1:string;
      s:integer;
    begin
        data1.ADOConnection1.Connected :=true;
       {str2:=datetostr(date);
       if length(str2)<>10 then
       MessageDlg('YYYY/MM/DD!',mtError,[mbOk],0)
       else
       begin }
       str:=adotable1.Lookup('id',edit1.Text,'password');
       str:=delzero(str);
        str3:=combobox1.Items[combobox1.ItemIndex];
          if edit2.Text=str then
              begin
                ModalResult :=1 ;
                suecced:=true ;
              end
          else
              begin
                MessageDlg('对不起!你无权进入系统',mtError,[mbOk],0);
                ModalResult :=0;
              end  ;
      //  end;
    end;
      

  3.   

    procedure TOKBottomDlg.OKBtnClick(Sender: TObject);
    var
      edityhm,editmn,yhm,mn:string;
      i:integer;
    begin
    edityhm:=trim(edit1.Text);
    editmn:=trim(edit2.Text);
    with txl_data.Data_txl.ADOQuery1 do
    begin
      SQL.Clear;
      SQL.Add('select * from yhmn where yhm='''+edityhm+' and mn='''+editmn+'''');
      Open;
      i:=recordcount;
    end;
    if i>0 then
      Close
    else
    begin
       showmessage ('错误的用户名或密码,您无法使用本系统!');
       application.Terminate ;
    end;end;
      

  4.   

    工程文件中修改 
    Application.Initialize;
      Application.CreateForm(TdengluForm, dengluForm);\\登录窗口运行,要有成功时的返回值和确定/取消
      Application.Run;
      dengluForm.hide;
      dengluForm.Free;
    if 成功 and 确定 then
    begin
      Application.Initialize;
      Application.CreateForm(TFormMain, FormMain);\\主窗口运行
      Application.Run;
    end;
      

  5.   

    登陆窗口代码不好,改成:
    procedure Tw_login.BitBtn1Click(Sender: TObject);
    var
      str,str1: string;
    begin
      if length(label4.Caption)<10 then
          MessageDlg('请将时间格式调整成YYYY/MM/DD', mtError, [mbOK], 0) ;
           ModalResult := 0;
      if length(label4.Caption)=10 then
        begin
            str1:=trim(edit2.Text);
            str:=trim(edit3.Text);
            adotable1.Locate('id', str1, []);
            if trim(adotable1.fieldbyname('id').AsString )=str1 then
              begin
                 if trim(adotable1.fieldbyname('password').AsString )=str then
                    begin
                      ModalResult := 1;
                      suecced     := True;
                    end
                 else
                    begin
                      MessageDlg('对不起,你无权进入系统!' mtError, [mbOK], 0);
                      ModalResult := 0;
                    end;
               end
           else
               begin
                  MessageDlg('对不起,你无权进入系统!', mtError, [mbOK], 0);
                  ModalResult := 0;
               end;
        end;
    end;
      

  6.   

    open和execsql的区别,你要搞懂!
    不要两个都用。
    open一般用于SELECT语句,有返回值;
    EXECSQL用于UPDATE、INSERT等语句,不需要返回值。