在登陆界面的时候,帐号和密码输完了,点击登陆会报错,不是帐号和密码有错,可能是数据库出错,然后点退出的时候出报错.
错误如下图:

解决方案 »

  1.   

    这是主窗体代码:unit MainForm;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, Menus, ComCtrls;type
      TMain = class(TForm)
        MainMenu1: TMainMenu;
        N1: TMenuItem;
        N2: TMenuItem;
        N3: TMenuItem;
        N4: TMenuItem;
        procedure N1Click(Sender: TObject);
        procedure N4Click(Sender: TObject);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
        procedure FormCreate(Sender: TObject);
        procedure N3Click(Sender: TObject);
        //procedure ShowHint(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Main: TMain;
      jj:integer;implementation
    uses InfoForm,landForm,Findform;{$R *.dfm}procedure TMain.N1Click(Sender: TObject);
    begin
          APPLICATION.CreateForm(TInfo,Info);
          Info.ShowModal;
          Info.Free;
    end;procedure TMain.N4Click(Sender: TObject);
    begin
        Application.Terminate;
    end;procedure TMain.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
        Application.Terminate;
    end;procedure TMain.FormCreate(Sender: TObject);
    begin
          jj:=0;
          if jj = 0 then
               begin
                  APPLICATION.CreateForm(TLanding,Landing);
                  Landing.ShowModal;
                  Landing.Free;
               end;
          //application.Hint;end;procedure TMain.N3Click(Sender: TObject);
    begin
          APPLICATION.CreateForm(Tfind,find);
          find.ShowModal;
          find.Free;
    end;end.
      

  2.   

    这是登陆窗体代码:unit LandForm;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, DB, ADODB;type
      TLanding = class(TForm)
        Label1: TLabel;
        Label2: TLabel;
        Edit1: TEdit;
        Edit2: TEdit;
        Button1: TButton;
        Button2: TButton;
        ADOConnection1: TADOConnection;
        ADOQuery1: TADOQuery;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure Edit1KeyPress(Sender: TObject; var Key: Char);
        procedure Edit2KeyPress(Sender: TObject; var Key: Char);
        procedure FormCreate(Sender: TObject);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Landing: TLanding;implementation
    uses MainForm;{$R *.dfm}procedure TLanding.Button1Click(Sender: TObject);
    begin
        with ADOQuery1 do
          begin
          close;
          sql.clear;
          sql.add('select * from UserForm where Tname = :Tname');
          Parameters.ParamByName('Tname').Value:=edit1.Text;
          Open;
          end;
          if (ADOQuery1.RecordCount=1) and (ADOQuery1.FieldByName('loginpass').AsString=edit2.Text) then
              begin
                  self.Close;
                  //Main:=TMain.Create(application);
                  //Main.ShowModal;
              end
          else
              begin
              MessageDlg('用户名或密码有错!',mtinformation,[mbok],0);
              edit1.SetFocus;
              end;
    end;procedure TLanding.Button2Click(Sender: TObject);
    begin
       application.Terminate;
    end;procedure TLanding.Edit1KeyPress(Sender: TObject; var Key: Char);
    begin
        if key = #13 then
          Button1.Click
        else
            if key = #27 then
                Button2.Click;
    end;procedure TLanding.Edit2KeyPress(Sender: TObject; var Key: Char);
    begin
        if key = #13 then
          Button1.Click
        else
            if key = #27 then
                Button2.Click;
    end;procedure TLanding.FormCreate(Sender: TObject);
    begin
       jj:=1;
       Edit1.Text:='';
       Edit2.Clear;
    end;procedure TLanding.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
        Application.Terminate;
    end;end.
      

  3.   

    你的landing这个form是auto-create 还是avaliable form?
      

  4.   

    动态设置ado数据连接的参数即可,你的这个登陆窗体和主窗体的关系可能也有问题
      

  5.   


    不太明白什么是动态数据连接?
    是指手动写ADO的连接吗?
      

  6.   

    登录窗口如果是在程序中自动加载的话可以用这个方式,在view source里面写,然后在登录窗口中判断是否登录成功~~!
     
      begin
      Application.Initialize;
      Application.ShowMainForm  :=  False;
      Application.CreateForm(TFrmMain, FrmMain);
      Application.CreateForm(TFrmLogin, FrmLogin);
      if FrmLogin.ShowModal   =mrCancel then   //取消登录主窗口自动退出,程序自动退出
         FrmMain.Close
      else
         FrmMain.Show;
      Application.Run;
    end.
     如果是在主窗口中加载,最好取消登录窗口的自动加载,procedure TFrmMain.FormCreate(Sender: TObject);
    begin
      Application.CreateForm(TFrmLogin, FrmLogin);
      if FrmLogin.ShowModal   =mrCancel then    //取消登录主窗口自动退出,程序也自动退出
         FrmMain.Close;
      FrmLogin.free;
    end;你的代码中主窗口创建后马上又创建了登录窗口,但是登录窗口不管作何处理,只要关闭了登录窗口,主程序就会退出,
    procedure TLanding.FormClose(Sender: TObject; var Action: TCloseAction); 
    begin 
        Application.Terminate; 
    end; 
    但是此时主窗口只是刚刚创建完成,主程序就执行了Application.Terminate,所以有些事件没有执行完或是对象没有释放,所以会报错~~!