try
{
...... if(adStateOpen == pRdMySql->GetState())
pRdMySql->Close();
}
catch (_com_error &e)
{
_bstr_t ErrMessage=e.Description(); if(adStateOpen == pRdMySql->GetState())
pRdMySql->Close(); ExportLogFile("ERROR:"+(CString)(char *)ErrMessage+"\r\n");//写入日志文件
}进入catch块时,要是pRdMySql->Close()的话,就出现运行库错误,可如果不写close就不会出错。
为啥?咋解决呢???
{
...... if(adStateOpen == pRdMySql->GetState())
pRdMySql->Close();
}
catch (_com_error &e)
{
_bstr_t ErrMessage=e.Description(); if(adStateOpen == pRdMySql->GetState())
pRdMySql->Close(); ExportLogFile("ERROR:"+(CString)(char *)ErrMessage+"\r\n");//写入日志文件
}进入catch块时,要是pRdMySql->Close()的话,就出现运行库错误,可如果不写close就不会出错。
为啥?咋解决呢???
解决方案 »
- GDI/GDI+中如何快速将HDC刷成白色?
- 不知何去何从,求建议.
- 实现DWebBrowserEvents2接口使用自定义类CMyWebBrwoser2Event
- 关于C++调动COM组件
- 小问题,我的窗口上一次画出的文字怎么没有消失呢,谢谢
- 怎样得到系统颜色数?
- 关于文本编辑框(sdk)
- ATL中[in]BSTR str从asp中输入参数,但不能SysFreeString(str),为什么
- 一个高手值得一看的简单问题~!!~!
- 紧急求救:谁知道运行.chm的是哪个程序?
- 大家好,我是一个刚毕业的MM,上级让我开发ATM银行自助设备软件,可是网上这方面的资料又特别少,希望高手指点!
- MDI中开多个子窗口,怎么知道哪个没保存?
if(pRdMySql->State)
pRdMySql->Close();
pRdMySql->Close();
这个语句我也试过,一样的结果。
1。ADO是用的是COM组件技术,进入程序前要初始化CoInitialize(),退出程序后要CoUninitialize()。(也有的用AfxOLEINTI()?,记不清了,好像是这个函数,是把上面的二个函数集成在一起的)
你把CoUninitialize()注释掉看看。
2。用如下语句代替你的try内的语句
if( pRdMySql != NULL )
{
pRdMySql.Close();
pRdMySql = NULL;//这一句很重要,记住所有关闭指针的操作都要搭配这一句。否则上面的if判断就进不来了。
}
我一般是这样做的.
try
{
...
}
catch(_com_error &e)
{
//写日志.
nErrorFlag = 1
}
if(nErrorFlag == 1)
{
try
{
//在这里关表.
}
catch(..)
{
//ErrorLog("关表失败");
}
}
这样唯一的好处是不会让你的程序崩溃.
if ( ADOSet->State == adStateOpen) ADOSet->Close();
try
{
ADOSet->Open(strSQL, ADOConn.GetInterfacePtr(), adOpenStatic, adLockOptimistic, adCmdUnknown);
}
catch(_com_error &e)
{
CString err;
err.Format("ADO Error: %s",(char*)e.Description());
AfxMessageBox(err);
}
//关闭ADO记录集
if(m_pRs != NULL && m_pRs->GetState() == adStateOpen)
m_pRs->Close();