在作一个项目时,遇到一个问题:在一个窗口中我同时使用了3个query,分别连接3个DBGrid,结果再关闭窗口时出现了错误,提示为“access violation at...”。我为了查找问题,我在一个新建的application中建立了一个窗口,里面的内容和上述窗口内容完全一样,却没有问题。怀疑是原来的项目中使用了较多的数据源,但反复检查也没有发现问题(query,storedproc的使用都完全正确)。请问各位高手这是怎么回事?

解决方案 »

  1.   

    是的,我的窗口是动态创建。最后关闭的代码是
        query5.close;
        query6.close;
        query7.close;
        form1.release;
        就在关闭窗口时报错。如果改为form1.close;这时不报错,但在关闭创建form1的窗口时要报错。
        另外说明一下,如果使用一个query就不会出错。现在我都搞不清是query使用的问题还是资源释放的问题了。
      

  2.   

    动态创建的窗口,你要在close事件中加上Action:=CaFree,这样才能保证所有的资源都释放,你先试试看吧
      

  3.   

    不能地formClose或Formdestroy事件调用form1.release;
    就在创建的地方form1.free;
      

  4.   


    var
      Form1: TForm1;
    begin
      form1  := tform1.create(self);
      try
        form1.showmodal;
      finally
        form1.free;//这样释放
      end; 
    end;
      

  5.   

    各位介绍的方法我都试过,问题还是没有解决,不过发现一些新现象:一是当form1只有一个query时,使用完全没有问题;二是这个问题只是在创建form1的窗口是managerform3的时候才出现,而在
    managerform1和managerform2里则没有问题。managerform1和managerform2比较简单一些,其中managerform1是用于信息显示,managerform2是用于身份验证,而managerform3是创建调用其他功能窗口的平台,有一个下拉菜单,但没有query和storedproc组件。以上情况供各位大侠参考。