开发过indy以及用过ADO的,请进来帮一下忙!
我用的是indy9,在IdTCPServer的OnExecute事件内。使用ADO。对SQL进行统计。
ADOConnection_Auto = new TADOConnection(NULL);
ADOQuery_Auto = new TADOQuery(NULL);
ADOConnection_Auto->Close();
ADOConnection_Auto->LoginPrompt = false;
ADOConnection_Auto->ConnectionString = ADOConnection_ok->ConnectionString;
ADOConnection_Auto->Open();
ADOQuery_Auto->Connection = ADOConnection_Auto;
这里是代码,使用ADOQuery。
try
{
//下面准备销毁这些
ADOQuery_Auto->Close();
ADOConnection_Auto->Close();
delete ADOQuery_Auto;
delete ADOConnection_Auto;
}
catch(...)
{
Write_LOG("删除ADO出错!");
}
//不知道上面的做法怎么不正确。会出很多"删除ADO出错!"的日志。
[解决办法]
用ADOQuery_Auto->Free()
[解决办法]
楼主的这段代码看不出错误,检查其他地方吧
是不是
try
{
//这里还有代码,这里出错的?
//下面准备销毁这些
ADOQuery_Auto->Close();
...
[解决办法]
你这个try...catch用的不合适。应该这样用:
ADOConnection_Auto = new TADOConnection(NULL);ADOQuery_Auto = new TADOQuery(NULL);try{ try { ADOConnection_Auto->Close(); ADOConnection_Auto->LoginPrompt = false; ADOConnection_Auto->ConnectionString = ADOConnection_ok->ConnectionString; ADOConnection_Auto->Open(); ADOQuery_Auto->Connection = ADOConnection_Auto; // 这里是代码,使用ADOQuery。 } catch(...) { Write_LOG("删除ADO出错!"); }}__finally{ ADOQuery_Auto->Close(); ADOConnection_Auto->Close(); delete ADOQuery_Auto; delete ADOConnection_Auto;}
[解决办法]
你这样子try...catch,如果中间有代码执行出错,会有内存的泄露的可能啊。不信你加个断点试试,如果中间有代码出错,delete ADOQuery_Auto未必能执行到。
try...finally组合可以保证finally段内的代码即使前面有异常也能正常执行到。
[解决办法]
为什么在catch之后不记录下来具体的错误内容呢?
[解决办法]
这些办法都是不能解决根源的;
断点调试一下,看看具体错误在哪里,然后修改之
不然始终会出大问题的