VC ADO 访问MYSQL _com_error异常

xingm 2013-12-17 10:20:52
在用VC通过ADO访问MYSQl数据库时,增加一条记录,并且用try{},catch{}去捕捉,当输入正确的记录时,程序通过正常,但当输入的记录和数据库表格不匹配,在调用update()时,在ADO的内部_com_issue_errorex()函数处报中断,本来想通过捕捉_comm_error来处理问题,但在_com_issue_errorex()抛出错误函数出现错误,会是什么原因?怎么解决?这问题已经困扰了好几天了,希望谁帮我一下,不胜感激,多谢了!
...全文
1699 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
worldy 2015-09-20
  • 打赏
  • 举报
回复
catch (_com_error * e)==> catch (_com_error &e)
wawagua 2015-09-20
  • 打赏
  • 举报
回复
__uuidof(this),这个错了,这个this不对
lhhjf1 2015-06-30
  • 打赏
  • 举报
回复
用ADO访问时比较方便的
梨花带血 2015-06-24
  • 打赏
  • 举报
回复
楼主,你的这个访问mysql的时候如果sql语句是“select*from”,在不奔溃吗
GIS_wudi 2015-05-14
  • 打赏
  • 举报
回复
引用 5 楼 hdg3707 的回复:
try { m_pRecordset->Update(); } catch(_com_error * e) { } 这么试试,如果不行,恐怕就没办法了
引用不是指针,这句很关键
zyq5945 2013-12-18
  • 打赏
  • 举报
回复
xingm 2013-12-17
  • 打赏
  • 举报
回复
非常感谢zyq5945,确实是_com_error错误了,要使用引用,不是指针,改过来后捕捉到错误了,不再在_com_issue_errorex()处产生中断了。现在又有新的问题了,譬如用户增加一条记录,可能输入的关键字已经存在,这时用记录集对象的update()就会产生错误!这种状态下想关闭记录对象或再增加一条正确的记录,程序都会中断报错,这时候怎么处理,才能使记录集对象恢复到原来的状态呢?即我能对其进行操作。
xingm 2013-12-17
  • 打赏
  • 举报
回复
程序代码大概如下: 1.初始化 ::CoInitialize(NULL); _ConnectionPtr m_pConnection = NULL; _RecordsetPtr m_pRecordset = NULL; 2.创建实例 try { m_pConnection.CreateInstance(__uuidof(Connection)); m_pConnection->ConnectionTimeout = 10; m_pConnection->Open((LPCTSTR)Connectionstr,(LPCTSTR)mUser,(LPCTSTR)mPassword,adModeUnknown);//Connectionstr,mUser,mPassword为自定义的参数 m_pRecordset.CreateInstance(__uuidof(Recordset)); m_pRecordset->Open(_variant_t(msql), //SQl的select语句 m_pConnection.GetInterfacePtr(), //数据库的连接指针 dOpenDynamic, adLockOptimistic, adCmdText ); } catch (_com_error * e) { AfxMessageBox(e->Description()); return FALSE; } /////// try { m_pRecordset->AddNew(); m_pRecordset->PutCollect("stationid",(_variant_t)(8)); //stationid为一个字段名称 m_pRecordset->Update(); } catch(_com_error * e) { AfxMessageBox(e->Description()); return FALSE; } 错误中断点在msado15.tli inline HRESULT Recordset15::Update ( const _variant_t & Fields, const _variant_t & Values ) { HRESULT _hr = raw_Update(Fields, Values); if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this));//错误中断点 return _hr; }
xingm 2013-12-17
  • 打赏
  • 举报
回复
不是自己调用_com_issue_errorex(),而是运行update()时,ADO内部自动调用,调试跟踪到该点,在_com_issue_errorex()产生一个中断提示。
向立天 2013-12-17
  • 打赏
  • 举报
回复
try-catch捕获不到? 不应该吧 你怎么写的
worldy 2013-12-17
  • 打赏
  • 举报
回复
但在_com_issue_errorex()抛出错误函数出现错误 什么错误?你自己调用这个函数?
zyq5945 2013-12-17
  • 打赏
  • 举报
回复
或者加异常捕获看是什么错误,注意是_com_error的引用,不是指针
try
{
//你的ADO代码
}
catch (_com_error& e)
{
CString strMsg;
strMsg.Format(_T("错误描述:%s\n错误消息%s"), 
		(LPCTSTR)e.Description(),
		(LPCTSTR)e.ErrorMessage());
AfxMessageBox(strMsg);
}
hdg3707 2013-12-17
  • 打赏
  • 举报
回复
try { m_pRecordset->Update(); } catch(_com_error * e) { } 这么试试,如果不行,恐怕就没办法了

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧