我在一个Form中加入一个ListView控件, ListView中的内容是显示某个年级的所有班级,年级和班级信息存在数据库的ClassTable表中,用了一个TQuery,执行所有操作:从ClassTable中读班级数据显示在listview中(用的是select),从listview中把新建的班级写入(用的是SQL的insert和update)都正常,但就是在删除的时候刚运行程序的时候还正常,但只要再多执行删除操作,就出现一下异常:
Access violation at address 00444D8Ab in module 'scoresystem',read of Address 0000038
这是个什么冲突呀是访问内存吧。。?另外有的时候我在编译工程的时候,会提示内存不足以运行我的程序我这样说的实在很空洞,
但我想请教大家的是:
1。用Delphi编写数据库应用系统的时候,一个FORM中的Table和TQuery多少和内存的占用是不是很有系.
2.用一个TQuery数据集,执行所有查删修改操作时候,会不会对访问数据库有什么影响和冲突什么的..TQuery每执行完一次SQL语句后..是把它打开还是关闭....?
3.TDataBase..要不要总是设置与数据库联接..有什么影响吗?
希望大家能够原谅我问了这些很空也很杂并且很肤浅的有的甚至是不知所谓问题..谢谢,不好意思只有60分了。.

解决方案 »

  1.   

    更正:1。用Delphi编写数据库应用系统的时候,一个FORM中的Table和TQuery多少和内存的占用是不是很有关系.
      

  2.   

    每次执行完后要关闭,清除SQL语句
      

  3.   

    TDatabase的keepconnection最好设为true,这样一次连接成功后,它会保持连接,要不每次都重新连接,费时间,速度慢,如果数据量大的时候会非常明显。
    TQuery最好使用一次,打开一次,用的多了当然占内存,
    估计你的问题是某些地方对内存的释放有问题,有可能某些对象创建了,但没有释放。
      

  4.   

    hhnick(nick) 
    ============
    Form上的那些控件对象在form处于活动状态时候应该是被加载到内存中吧...而当这个Form被关掉时,Delphi应该会自动把这些对象给析构掉吧。我没有自己定义类并创建其对象,也没有在程序中动态创建过控件对象(只在ListView中显示新创建的班级时候,用TListView.addItem方法添加过TListItem对象,但在删除的时候,我用TListItem.Clear方法把它给卸掉了)。。我就是在Form中加控件然后对它们编代码。。
    接触Delphi没几天,而Delphi封装的又太好了。。我感觉我对自己写的东西没点底,搞不清哪儿可能会蹦出问题来,有的时候某中方法行不通,我用另外一中方法饶过它给解决了,但我自己也说不请为什么前面不行而后面又行了。。看来还要加油。
      

  5.   

    zhang_qing77(zhang) 
    =============
    我的程序目前做的只有三个窗口,一个主界面:上面有菜弹,ToolBar,statusbar,TreeView,3个Panel,4个pageCtrl,每个pageCtrl上有一个DBGrid,一个dataset,还有其他的什么就不说了。。主界面还没写代码,还有两个模块(对话框形式)做的差不多了,控件的数目和主界面差不多,它们是通过主界面的菜单,用showModal方法弹出来的。。好想不多吧
    我想问的是:在主界面显示的时候,而我没有用鼠标点激活另两个模块的窗口时候,它们应该没在内存中吧?而当我从另两个窗口中点右上角的关闭按钮的时候,这两个窗口以及其上的控件对象应该都会自动被析构掉吧而无需我自己写代码吧?
      

  6.   

    用ADOconnection,adoquery,datasource吧,简单方便,易操作
      

  7.   

    呵呵。。问题找到了也解决了。。和数据库无关,和对象的释放有关,就是我在删除listview的多个被选item时候,在GetNextItem(item,sdAll,[isSelected])之前就把当前item给free了。。结果GetNextItem找不到Item参数了。。就violation了谢谢大家
      

  8.   

    另外我在想问问。。在同一个系统中可不可以既用odbc,有用ADO连接数据库,,就是有的模块用odbc,有的模块用ado...?
      

  9.   

    可以,没有问题,还可以用用BDE,但是做出来的程序可能会有点大哟
      

  10.   

    我现有做和一个导表程序,就是用了ADO,ODBC,还用了BDE呢!我程序照样运行很好.如果没有必要还是不要用得太多,足够就行了.
      

  11.   

    另外我在想问问。。在同一个系统中可不可以既用odbc,有用ADO连接数据库,,就是有的模块用odbc,有的模块用ado...?---------------------
    没问题,再加上BDE 、DAO 等等都没事,不过不推荐使用 BDE ,
    速度慢,而且要装Borland 的数据库引擎。
      

  12.   

    谢谢大家的参与,从你们的回复获的益处比从那些从头到尾罗列控件属性和方法的垃圾书要多多了..
    谢谢...
    这个帖子的最后一个问题:
    同一个系统用了odbc和ado连接数据库后后,打包发布的时候,是不是和各自单独用没什么分别:
    也就是在发布软件的时候,要做两件事情:
    1.在程序中加注册表控件,把odbc的DNS数据源设置和ODBC驱动信息写入注册表.
    2.设置好ADO的数据库的连接.
    是这样的吧?两者没有冲突什么的吧?