首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

开发过indy以及用过ADO的,请进来帮一下忙!该如何处理

2012-02-21 
开发过indy以及用过ADO的,请进来帮一下忙!我用的是indy9,在IdTCPServer的OnExecute事件内。使用ADO。对SQL进

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

热点排行