读书人

开发过indy以及用过ADO的请进来帮一

发布时间: 2012-02-21 16:26:23 作者: rapoo

开发过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用的不合适。应该这样用:

C/C++ code
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之后不记录下来具体的错误内容呢?
[解决办法]
这些办法都是不能解决根源的;
断点调试一下,看看具体错误在哪里,然后修改之
不然始终会出大问题的

读书人网 >C++ Builder

热点推荐