下面是对象的建立代码,
constructor TWorkData.Create(DbAc: TDbAc);
begin
inherited Create(DbAc);
FTableDict := TAdoQuery.Create(Application);
FTableDict.Connection := FDbac.DbConnection ;
FList := TList.Create ;
FQueryInfo := TQueryInfo.Create(FDbAc);
FBookMarks := TMarkContainer.Create ;
end;下面是释放的代码:
destructor TWorkData.Destory;
var i: integer;
begin
for i := 0 to FList.Count - 1 do
Dispose(FList.Items[i]); FList.Free ;
FTableDict.Free ;
FBookMarks.Destory ;
FQueryInfo.Destory ;
inherited;
end;上面的代码在昨天和以前一直工作正常(两个星期了),今天写了很久以后,
测试时突然发现在关闭系统时会报内存错误。将TWorkData.Create代码修改为
以下后正常constructor TWorkData.Create(DbAc: TDbAc);
begin
inherited Create(DbAc);
//改行修改,让其拥有者为NIl
FTableDict := TAdoQuery.Create(Nil);
FTableDict.Connection := FDbac.DbConnection ;
FList := TList.Create ;
FQueryInfo := TQueryInfo.Create(FDbAc);
FBookMarks := TMarkContainer.Create ;
end;我也知道TAdoQuery.Create(Nil)和TAdoQuery.Create(Application) 之间的区别。奇怪的是为什么以前正常,到今天就要修改后才行,原因是什么?
constructor TWorkData.Create(DbAc: TDbAc);
begin
inherited Create(DbAc);
FTableDict := TAdoQuery.Create(Application);
FTableDict.Connection := FDbac.DbConnection ;
FList := TList.Create ;
FQueryInfo := TQueryInfo.Create(FDbAc);
FBookMarks := TMarkContainer.Create ;
end;下面是释放的代码:
destructor TWorkData.Destory;
var i: integer;
begin
for i := 0 to FList.Count - 1 do
Dispose(FList.Items[i]); FList.Free ;
FTableDict.Free ;
FBookMarks.Destory ;
FQueryInfo.Destory ;
inherited;
end;上面的代码在昨天和以前一直工作正常(两个星期了),今天写了很久以后,
测试时突然发现在关闭系统时会报内存错误。将TWorkData.Create代码修改为
以下后正常constructor TWorkData.Create(DbAc: TDbAc);
begin
inherited Create(DbAc);
//改行修改,让其拥有者为NIl
FTableDict := TAdoQuery.Create(Nil);
FTableDict.Connection := FDbac.DbConnection ;
FList := TList.Create ;
FQueryInfo := TQueryInfo.Create(FDbAc);
FBookMarks := TMarkContainer.Create ;
end;我也知道TAdoQuery.Create(Nil)和TAdoQuery.Create(Application) 之间的区别。奇怪的是为什么以前正常,到今天就要修改后才行,原因是什么?
解决方案 »
- 请问如何在listbox中读取sql数据库中的数据
- 读取MEMO里面每行内容出问题了,循环不下去,高手看下
- 请兄弟姐妹帮个忙,有哪位高手知道DELPHI中的dxfoutlookgroup组件在什么地方啊
- Oracle 中类似 sql server2000中的 CROSS JOIN 表连接.怎么写?
- delphi中连接sql2000数据库的方法,是否有专用接口,ado还是bde
- 求助
- Delphi ladar chart如何实现?
- 请问谁知道SQL2000的注册码啊。我的要注册码的。快帮帮我啊。
- 谁有多余的QQ给几个我好吗?现在根本就申请不到。
- 请问如何让DateTimePicker控件只显示年和月?
- 网络协议怎么学??
- 保存控件
TAdoQuery.Create(nil)是有你自己释放资源FQueryInfo.Destory ;也不应该用 ,FQueryInfo.Free,原因你看看帮助就知道了
_______________________________________________________________________________
真奇怪你为什么写程序一会儿用Free来释放资源一会儿用Destory来释放?
_________________________________________________________________________________FQueryInfo是我自己定义类的实例,没有写Free方法,只写了Destory方法,因为在系统中释放前不需要判断对象是否存在。原因不在这儿,至于TAdoQuery.Create(Nil)和TAdoQuery.Create(Application) 之间的区别我知道,我想知道的是,为什么以前正常,今天不正常,到底在哪种情况下会导致不正常?