超头痛,在退出程序时出错,请DELHPI高手指点迷经!TKS
DELPHI +SQL SERVER2000编写一小软件,程序在关闭时出现如所示错误提示,
Debugger Exception Notification(注:标题)
Project mp.exe raised exception class EAccessViolation with message 'Access violation at address 0040489c in module 'mp.exe'.Read of address 00000018'.Process stopped .Use Step or Run to continue.
点击确定后出下如下所示提示,
Error(注:标题)
Runtime error 216 at 004039C6.
我怀疑是数据库有问题,因为如果我换上以前的数据库不会出现这种情况,昨天我导了一些数据进去就出现种错误提示,数据库连接我采用的是动态数据库连接,这应该不是情况所在,因为如我之前所述,程序没办,只是在导入一些数据进去就出现这种问题,请问怎么解决?
问题点数:100、回复次数:25Top
1 楼fenger8293(http://www.pceggs.cn/pgComDefault.aspx?ID=191016)回复于 2006-07-03 13:45:27 得分 10
你看看你退出程序的时候做了什么工作.是否有内存引用上的不合理的地方.Top
2 楼zaza_bbface(我试着成熟一点~)回复于 2006-07-03 13:58:45 得分 10
可能是释放资源时出了错Top
3 楼wlxc(人在江湖)回复于 2006-07-03 14:00:33 得分 10
可能是释放资源时出了错
Top
4 楼grjs2004(在岸边钓不到大鱼,只好下水去摸虾米!)回复于 2006-07-03 14:20:09 得分 10
要释放内存!
Top
5 楼swcsoft(对不起,我踩到你尾巴了!)回复于 2006-07-03 14:24:30 得分 20
楼主
case application.MessageBox('退出系统吗?','询问',33) of
1: application.Terminate;
2: Action:=caNone;
end;
你把退出的代码换成这样试一下。。Top
6 楼wudi_1982(向伴水学习|胃出血,住院中)回复于 2006-07-03 14:32:56 得分 5
把代码贴出来看看。。这种问题不好说。。一般是资源释放得问题。。自己好好研究研究代码。估计只有你自己解决了。Top
7 楼Rubi(浪迹Csdn各个板块!MS-Borland-IBM-SUN-水区-在去哪里呢?)回复于 2006-07-03 14:34:21 得分 5
2: Action:=caNone;
Action:=caFree;看看Top
8 楼dinglinger(小呆之家)回复于 2006-07-03 14:37:40 得分 10
,数据库连接我采用的是动态数据库连接,
//---估计是你在DLL中退出释放内存地址出错或是在DLL中释放内存后,主程序再次操作不存在的资源造成的内存地址访问错.
你好好查查是不是DLL的APPLICATION与主程序中APPLICATION的控制句柄的转让的问题.Top
9 楼sundgy(阳光男生)回复于 2006-07-04 08:39:09 得分 0
关键是如果我换用我以前的数据库,退出程序是不会出什么问题的哟.我的主程序退出代码如下:
action := cafree;
main := nil;Top
10 楼sundgy(阳光男生)回复于 2006-07-04 08:40:41 得分 0
完整退出主程序如下代码:
procedure TMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
action := cafree;
main := nil;
end;
procedure TMain.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if main.Visible = false then
exit;
if application.MessageBox('你确定要退出系统吗?','系统提示',MB_ICONQUESTION + MB_YESNO) = ID_NO then
CanClose := false
else
CanClose := true;
end;
Top
11 楼sundgy(阳光男生)回复于 2006-07-04 08:43:54 得分 0
换成<Top swcsoft(对不起,我踩到你尾巴了!) >问题依旧没解决.还是一样.Top
12 楼ffwin()回复于 2006-07-04 08:45:28 得分 0
懒的回答,我看到了中国程序员的悲哀,中国的悲哀Top
13 楼jaffy(小胖猫^_^笨猫先飞)回复于 2006-07-04 08:54:56 得分 10
肯定是资源释放的问题,比如数据库的连接没有释放,关闭之后又调用了等等.Top
14 楼cncharles(旺仔)回复于 2006-07-04 08:59:12 得分 5
procedure TMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
action := cafree;
end;
procedure TMain.Destory(Sender: TObject);
begin
main := nil;
end;
Top
15 楼sundgy(阳光男生)回复于 2006-07-04 09:05:00 得分 0
TO:<ffwin() >别在那里他娘的装腔做势,你还不配说中国人怎么样.Top
16 楼sundgy(阳光男生)回复于 2006-07-04 09:07:04 得分 0
to:cncharles(旺仔) 问题依旧Top
17 楼sundgy(阳光男生)回复于 2006-07-04 09:09:44 得分 0
我就整不明白,为什么连接前天的数据库没问题,今天的就出现这种错误提示.照理说如果是程序释放内存或DLL出现了问题那应该连接前天的数据库也会出现这种错误提示啊.为什么换成新的就不行了.Top
18 楼cncharles(旺仔)回复于 2006-07-04 09:24:54 得分 0
你有没有用DLLTop
19 楼sundgy(阳光男生)回复于 2006-07-04 09:42:30 得分 0
没有,我是用ADO动态链接Top
20 楼wudi_1982(向伴水学习|胃出血,住院中)回复于 2006-07-04 09:54:02 得分 0
你从数据库都读了什么数据啊。。不会读写了什么“FUCK DELPHI"之类的吧。Top
21 楼sundgy(阳光男生)回复于 2006-07-04 10:53:36 得分 0
呵.....当然不会Top
22 楼sundgy(阳光男生)回复于 2006-07-04 11:30:34 得分 0
程序指向: Result := CallWindowProc(FPrevWndProc, FControl.Handle, Msg,
WParam, LParam)有异常请问是什么意思?Top
23 楼Cassava(车超)回复于 2006-07-04 11:51:43 得分 5
一般碰到这种问题我都是用代码排除法,也就是一段段代码去掉,直到没有出现错误为止,用这种办法很快就能找到错误的原因了Top
24 楼fcshen()回复于 2006-07-04 14:00:08 得分 0
肯定不是退出的代码造成的.一般是内存地址错误Top
25 楼sundgy(阳光男生)回复于 2006-07-04 15:38:10 得分 0
唉,只能靠自己了Top




