为什么我开发一个数据库系统软件时,总是在用了一段时间后WIN2000就会报内存访问错,然后把我的DELPHI关了呢,是因为开关库表连接太多了吗,还是因为不停尝试编译带来问题?有没有好的解决方法? 
  现在我的系统用了大量的ADOQUERY和DATASOURCE,请问该如何控制资源耗损问题呢?
  请高手指教!

解决方案 »

  1.   

    一般保护错-地址访问错,一般是使用了Free的对象或变量, 跟资源消耗没有关系.
      

  2.   

    把你的DELPHI关了是因为你的DELHI没有安装SP2的原故
      

  3.   

    动态创建adoquery和datasource,用完后free掉
      

  4.   

    无论何时碰到的访问冲突都意味着你的程序试图访问不能再为你的程序所获得的内存。请注意我用了“不再(No Longer)“获得。在很多场合中遇到访问冲突都是因为试图引用已经释放的对象的指针或者尚未创建的对象的指针。幸运的是,Win32的内存结构中,每个进程拥有独立的地址空间,因此我们不必担心覆盖其他程序的内存(这个在Win16种是经常遇到的问题)。这也说明了我们如今(actually)可以利用错误对话框中的信息。当我们碰到访问冲突对话框时,都会有个地址(例如:Access violation at address:?????)。记下这个地址,返回到应用程序中,打开CPU窗口,在CPU窗口中右击鼠标选择Goto address。当对话框出现的时候,输入刚才访问冲突发生的地方,你就到了引起访问冲突的指令。尽管CPU窗口中所有的都是用汇编语言写的,这并不对你很重要。如果你把滚动条向上滚一点,就可以看到你当前所处的函数。现在,你就知道是哪个函数引起了访问冲突。一旦你知道引起访问冲突的函数,就可以着手在这个函数中设立断点。不幸的是,不是所有的事情都那么容易,指针错误有时候非常难查找,总的规则是当指针所指向的对象被释放的时候,把这些指针都设置为NULL,你也许还想在厌恶的函数中使用指针前检查它是否为NULL,如果为NULL你可以输出一些排错信息来帮助你查明哪个指针在程序运行时引起了访问错误。作为最后的手段,你需要能够在那个指针处设立数据断点(data break point) 来检查它何时设为NULL
      

  5.   

    多半是资源耗用过多。
    你尽量少在设置期打开Query(在程序中Open),
    另外,不要把所有的Query或Datasource都放在一个界面上,要分开,
    设计时少开几个窗体。
      

  6.   

    再别的机器上编译的程序,使用前要将数据库的连接断开,比如adoconnection的连接必须断开,否则再另外一台机器上使用事会突然关闭