今天做了个小功能,对数据库进行删除操作,代码如下:
try
{
CString
sqlDelete;
sqlDelete.Format(L"delete
from fileInfo where fileNum = '%s';", fileNum);
CMainFrame
*pMain = static_cast(theApp.m_pMainWnd);
CVtopPlatformView*
vtopView = (CVtopPlatformView*)pMain->GetActiveView();
vtopView->m_pFileinfoRecordset->Open(_variant_t(sqlDelete),
vtopView->m_pConnection.GetInterfacePtr(), adOpenDynamic,
adLockBatchOptimistic, adCmdText);
vtopView->m_pFileinfoRecordset->Delete(adAffectCurrent);
vtopView->m_pFileinfoRecordset->MoveFirst();
vtopView->m_pFileinfoRecordset->Close();
}
catch
(_com_error &e)
{
AfxMessageBox(e.ErrorMessage());
}
结果出现了“Unknow error
0x800a0e78”的异常提示。
经过一番周折,原因终于找到了,原来是m_pFileInfoRecordset
内的字段长度为零,像插入和删除等不是查询的的命令,没必要返回一个命令集。返回的命令集的字段数是0,若调用adoeof或其他某些接口就会报错的。
解决方案:
try
{
CString
sqlDelete;
sqlDelete.Format(L"delete
from fileInfo where fileNum = '%s';", fileNum);
//关联数据集
CMainFrame
*pMain = static_cast(theApp.m_pMainWnd);
CVtopPlatformView*
vtopView =
(CVtopPlatformView*)pMain->GetActiveView();
vtopView->m_pCommand.CreateInstance(__uuidof(Command));
vtopView->m_pCommand->ActiveConnection
= vtopView->m_pConnection;
vtopView->m_pCommand->CommandText
= _bstr_t(sqlDelete);
vtopView->m_pCommand->Execute(NULL,
NULL, adCmdText);
}
catch
(_com_error &e)
{
AfxMessageBox(e.ErrorMessage());
}
问题终于解决了!!!!
加载中,请稍候......