有三个窗体 form_main  ,form1 ,form2 .   form_main 是主窗口, form_main 中 ShowModal 打开 form1 , form1中有个adoTable , form1 中 ShowModal 打开了 form2现在我在form2中写了一段脚本意思是编辑form1中的adoTable数据集,form2 used 了form1 。form2 中大脚本写到:
      Form1.ADOTable.Edit ;                         //第1句
      Form1.ADOTable.Append ;                         //第2句
      Form1.ADOTable.FieldByName('bh').AsString:='01';  //第3句
      Form1.ADOTable.Post ;                             //第4句为什么编译时没问题,但运行时总停在
                        Form1.ADOTable.Edit ;                         //第1句报错误:
  Access violation at address 005D0B4D in module 'project1.exe' Read of address 000002F8'.Process stopped.
Ues step or Run to continue .各位大哥快帮忙吧,我实不知道为什么了。

解决方案 »

  1.   

    对,必须先创建Form1,再创建Form2
      

  2.   

    除了form_main 是在程序开始创建的,form1是临时动态创建的form1_main中按钮有下面脚本在需要时打开form1form1 := Tform1.create(self) ;
    form1.showmodual;
    form1.free ;
    form1中又有按钮,在需要时打开form2 ,同样form2 也是动态创建的,form1,form2在主程序开始运行后都不自动创建。另外Form1.ADOTable是在开的状态。
      

  3.   

    估计这个ADOTable已经被释放掉了
      

  4.   

    如何不让 ADOTable 释放?
      

  5.   


    放到单独的datamodule中,或者动态判断
    if ADOTable1 <> nil then
      do
      

  6.   


    這個 Form1  是FORM1單元中的全局變理還是在MAIN裏面又重新聲明的?
      

  7.   

    肯定出錯啦。哪有這樣用的。Form2中應有個數據源 DataSource。把字段都綁定在這個dsScouce。
    編輯的時候,到From1去編輯。Datasource.dataSet := ADOTable;
    然後在Form1中編輯ADOTable。就可以了、