Delphi6.0+BDE,数据库sql。试登录窗口的取消按钮和窗口关闭按钮,都会引起这个错误,请指教。

解决方案 »

  1.   

    代码如下:
    。。
    var m_cz:string;
       
    type
      Tlogin = class(TForm)
        Label1: TLabel;
        Label2: TLabel;
        Edit1: TEdit;
        Edit2: TEdit;
        BitBtn1: TBitBtn;
        BitBtn2: TBitBtn;
        Query1: TQuery;
        procedure BitBtn1Click(Sender: TObject);
        procedure Edit1KeyDown(Sender: TObject; var Key: Word;
          Shift: TShiftState);
        procedure BitBtn2Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
       
      private
        { Private declarations }
      public  end;var
      login: Tlogin;implementation{$R *.dfm}procedure Tlogin.BitBtn1Click(Sender: TObject);
    begin
       with query1 do
       begin
         ParamByName('dm').AsString:=lowercase(edit1.text);
         ParamByName('passwd').AsString:=edit2.text;
         open;
         if eof then
           if login.tag<2 then
             begin
             login.Tag:=login.tag+1;
             application.MessageBox('用户或口令错误,请重输!','注意',mb_ok);
             edit1.SetFocus;
             end
           else
             begin
             application.MessageBox('抱歉,您不能使用本系统!','注意',mb_ok);
             modalresult:=mrcancel;
             end
         else
           begin
             m_cz:=trim(lowercase(edit1.text));
             modalresult:=mrok;
           end;
           close;
         end;
       end;

    怎么解决?
      

  2.   

    不关这段代码的事,而在你modalresult<>mrok后,你的处理返回结果的窗口做了不该做的事
    比如数据库还没打开就操作某些资源
    你要是把loginform的cancel按钮事件这样写,就不会发生问题了
    oncancelclick()
    begin
      halt;
    end;
    (说明:这样写是不合适的,应当想别的办法避免。我这么写只是为了指出你程序错在了什么地方)
      

  3.   

    就在这里调用:program hx;uses
      Forms,
      controls,
      sysutils,
      u_main in 'u_main.pas' {main},
      u_data in 'u_data.pas' {DataModule1: TDataModule},
      u_login in 'u_login.pas' {login},
      u_wzjk in 'u_wzjk.pas' {wzjk};{$R *.res}begin
      Application.Initialize;
      Application.CreateForm(Tmain, main);
      Application.CreateForm(TDataModule1, DataModule1);
      Application.CreateForm(Tlogin, login);
      Application.CreateForm(Twzjk, wzjk);
      if login.ShowModal=mrok then Application.Run;//这里
    end.
      

  4.   

    你的mainform的ondestroy中写了代码或datamodule的ondestroy中写了代码
    你在那里设个断点试试
      

  5.   

    main里的ondestroy断点没起作用,是否和其他form有关?
      

  6.   

    有可能
    你在main.oncreate、datamodule.oncreate里都创建了哪些对象?
    这些对象的释放都在哪里?
    我劝你最好单步跟踪一下,看看到底是在哪出的错误if login.ShowModal=mrok then Application.Run;
    在这里设断点,然后单步跟踪
      

  7.   

    初步结果:
    begin
      Application.Initialize;
      Application.CreateForm(Tmain, main);
      Application.CreateForm(TDataModule1, DataModule1);
      Application.CreateForm(Tlogin, login);
      //Application.CreateForm(Twzjk, wzjk);
      if login.ShowModal=mrok then Application.Run;//这里
    end.
    这样就pass了,Twzjk里用了2个第三方控件:Ehlib2.3和dxmemdata,难道和这2个控件有关?
    如果是的话而且不想放弃使用此2个控件(偶觉得很好用),是否只有用Halt呢?