以下是双击用户管理按钮打开用户管理界面代码:
 if Frm_User = nil then
  Frm_User := tFrm_User.create(self);
 Frm_User.showmodal;
提示错误:access violation at address 00628C8E in module "test.exe" Read of address 00000024这种窗口打开错误怎么解决,我前几天还是好好的,怎么突然就出现这种提示?还请大哥大姐们指点一下.

解决方案 »

  1.   

    改在这样试试:if Frm_User = nil then
      Frm_User := tFrm_User.create(self);Frm_User.showmodal;
    FreeAndNil(Frm_User);
      

  2.   

    如果代码如此,以前肯定也不行。而且第一次执行没有问题,以后就会出问题。
    问题出在if Frm_User = nil then上面,因为第一次的时候确实Frm_User = nil,而第二次的时候虽然Free了,但是已经不是nil了,所以没有创建,再次ShowModal的时候就当然出错了。我一般都是这么写
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      With tFrm_User.create(Application) do
      Try
        ShowModal;
      finally
        free;
      end;
    end;
      

  3.   

    to ALL:
     改成foxyy8888(SY强身,YY强国) 所提供的方法,变成下面提示:
    access violation at address 00404912 in module "test.exe" Read of address 0000001D
    我在tFrm_User的创建过程中有以下代码:
    procedure TFrm_User.FormCreate(Sender: TObject);
    begin
     showmessage('123');
        dm.ADQUser.Active := false;
        dm.ADQUser.Active := true;
    end;
    点击用户按钮,测试弹出框123正常,以下就不正常,也就是问题出在数据库联接上,请问该怎么写?
      

  4.   

    TO ALL:
      foxyy8888(SY强身,YY强国) 所提供的方法是有效的,其它兄弟的方法有点差入,但出现上述新问题,还请多帮忙.
      

  5.   

    感觉上你这里主要就是对象的创建与回收的问题,仔细检查所有的对象(窗体、DM等),创建了有没有正确的回收,是不是要使用FreeAndNil函数,你的问题在你提供的代码范围内检查不出问题的,要看你的整个程序,你自己仔细检查下,问题多数在Frm_User中的对象。
      

  6.   

    procedure TForm1.Button1Click(Sender: TObject);
    begin
      if not Assigned(Frm_User) then
        Frm_User := tFrm_User.create(self);
      try
        if Frm_UserShowModal = mrOK then
        begin
          //……
        end;
      finally
        FreeAndNil(Frm_User);
      end;
    end;
      

  7.   

    不对,好像是出在ADO数据库链接上,但又找不出原因.
      

  8.   

    应该是模式窗口显示冲突问题,检查一下visible属性是否被打开了
      

  9.   

    在tFrm_User的destory事件里写 Frm_User:=nil;
      

  10.   

    排除Frm_User的create,没有问题外,应该还有另外一种可能,那就是tFrm_User这个窗口类的OnCreate事件中,是不是执行了一些操作引起这个问题的.比如访问未始化的指针等等