我从登陆界面from1上登陆到主界面form2后,想重新登陆不能直接调用form1.因为不能循环调用,怎么才能在利用form1的登陆界面呢?从form1登陆的form2后,怎么释放form1占用的内存呢?我用 form2的oncreate中写 
application.creatform(Tform1,form1); 
form1.showmodal ; 
form1.free ; 我是用ADOQuery1调用的access表,从里面查找到相应的字段就显示form2,重新登陆后在用form1,在进form2,就出现以下情况: 
用form1.showmodal提示: 
Access Violation at address 00000000 
Read of address 00000000 用form1.show提示: 
Access Violation at address 0000FBC3 
Read of address 0000FBC3 是什么原因呢?

解决方案 »

  1.   

    application.creatform(Tform1,form1);
    改成:
    form1 := TForm1.Create(Application);
      

  2.   

    我在form1中有create事件,是这个原因造成的吗?
    form1的create事件如下,从数据库表book中查找到登陆用户名添加到xm(是ComBoBox控件)中:
    procedure Tlogin.FormCreate(Sender: TObject);begin
    MyPath:=extractfilepath(Paramstr(0));
    adoquery1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+mypath+'data\book.mdb;Persist Security Info=False';
     with ADOQuery1 do
      begin
        SQL.Clear;
        SQL.Add('select 用户名 from manager ');
        Open;
         if RecordCount>0 then
        While not Eof do
          begin
            XM.Items.Add(FieldValues['用户名']);
            Next;
          end;
      Close;
      xm.ItemIndex:=0;
    end;end;
    ----------------------------------------------
      

  3.   

    重新登录
    application.terminate;
    winexec('project1.exe',1);
     
    project1.exe是应用程序的名称
      

  4.   

    程序的架构有问题
    可以考虑建立Form3作为mainForm来控制其他的Form