编写数据库程序,运行若干次后,提示内存不够?(无内容)(100分)

  • 主题发起人 主题发起人 foolishwolf
  • 开始时间 开始时间
可能是申请内存后没有显式释放。
试试在程序关闭时显式断开数据库连接。
 
调用数据库时不正确
 
原因一:数据库表打开后,没有close掉。
建议在程序关闭或含数据控件的form的close事件中加入如下语句:
if query1.Active then Query1.close;
if table1.active then table1.close;
.....
.....
原因二:动态创建的变量未释放
例如
slist := TStringList.Create;
...
slist.free;//如果不写本语句,则会一直占用内存。最后造成内存不够。
建议你在程序中查询Create关键字,
看是否是这个问题

 
1 用 getmem 申请的内存没有释放.
2数据库表没有关掉.
3系统有问题.
最好写出源代码.好找原因
 
大家都只是在猜,可见此现象没遇到过。
其实程序的其它地方可能没问题,主要是打开了数据库表没关闭。只需在应用关闭时关闭表就是了。如果你在调试程序中,可能会出现打开表后尚未关闭前中断了程序运
行。没关系只需关闭Delphi或Windows重来。
 
谢谢大家!
这个现象我遇到过多次。
请问:
1。为何各位建议要显性地关闭数据库?
2。出现“内存不够的”提示后,为何其他操作仍可进行?查看
系统资源,也提示还有很多内存可用?
3。是否可能与BDE设置有关?
 
不知你是否用了执行 SQL时用了 prepare
如果用了,需在不用时UNprepare,
我以前也碰到过这情况,原因如上.
 
to foolishwolf:并不是真的内存不足,与BDE设置无关,多次打开了表后查询缓冲区占用太大了。lishding说的也是一个原因。
 
agree sonie
你可以不显性地关闭数据库,程序中指他也关了。
但你在一个程序里多次调用就要关了。
 
这个现象我经常遇到过。
我开发的几个数据库系统中,都有这个问题。
据我所想,应是了数据库表没关闭。
可能的解决方法:
1、在form的onshow时打开数据库表,close时
关闭数据库表。
2、重登录Windows

 
lishding 说的有道理;
但本人认为这有可能是DELPHI5本身的缺陷。
 
请问sonie
查询缓冲区占用太大,那应该在程序中怎么注意呢?
请问chason
您提出的解决方法,是否测试过有效?
 
sonie 说的对,多次打开了表后查询缓冲区占用太大了。
你要查的数据库较大时,缓冲区占用太大。我今晚就遇到过
 
解决的方案只能是在打开表后,如不使用及时释放。但如程序出现多次异常中断那只能重启,释放内存。
 
这个问题我遇到多次,有时还死机.但我认为并非佛form 没有关掉!!
如果是dephi 5的问题,我可是用的dephi3.
to walala
不显性地关闭数据库,何解???( 脸红!!;-(,见笑!!!!)
 
接受答案了.
 
后退
顶部