我的源代码如下:
bool CDataProc::InitData()
{
m_pConnect.CreateInstance(__uuidof(Connection));
m_pRecordSet.CreateInstance(__uuidof(Recordset));
try
{
m_pConnect->Open("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\\HotelData.accdb","","",adModeUnknown); }
catch(_com_error e)
{
AfxMessageBox(e.ErrorMessage());
AfxMessageBox(_T("打开数据库失败!"));
} return true;
}RoomInfo* CDataProc::GetRoomInfo()
{
RoomInfo *pRoomInfo;
pRoomInfo = new RoomInfo;
_variant_t var; try
{
OpenRes(_T("select * from RoomInfo"));
while (!m_pRecordSet->adoEOF)
{
var = m_pRecordSet->GetCollect(_T("房号")); //此处出错
if (VT_NULL == var.vt)
{
pRoomInfo->strNum = (LPCTSTR)_bstr_t(var);
}
m_pRecordSet->MoveNext();
}
}
catch(_com_error e)
{
AfxMessageBox(e.ErrorMessage());
} //CloseRes(); return pRoomInfo;
}bool CDataProc::CloseRes()
{
m_pRecordSet->Close();
m_bOpenRes = false; return true;
}bool CDataProc::OpenRes(CString strSql)
{
if (false == m_bOpenRes)
{
m_pRecordSet->Open((_variant_t)strSql,m_pConnect.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
m_bOpenRes = true;
}
return true;
}
上面会报错:Onknown error 0x800A0CC1 ,望各位大虾请教
bool CDataProc::InitData()
{
m_pConnect.CreateInstance(__uuidof(Connection));
m_pRecordSet.CreateInstance(__uuidof(Recordset));
try
{
m_pConnect->Open("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\\HotelData.accdb","","",adModeUnknown); }
catch(_com_error e)
{
AfxMessageBox(e.ErrorMessage());
AfxMessageBox(_T("打开数据库失败!"));
} return true;
}RoomInfo* CDataProc::GetRoomInfo()
{
RoomInfo *pRoomInfo;
pRoomInfo = new RoomInfo;
_variant_t var; try
{
OpenRes(_T("select * from RoomInfo"));
while (!m_pRecordSet->adoEOF)
{
var = m_pRecordSet->GetCollect(_T("房号")); //此处出错
if (VT_NULL == var.vt)
{
pRoomInfo->strNum = (LPCTSTR)_bstr_t(var);
}
m_pRecordSet->MoveNext();
}
}
catch(_com_error e)
{
AfxMessageBox(e.ErrorMessage());
} //CloseRes(); return pRoomInfo;
}bool CDataProc::CloseRes()
{
m_pRecordSet->Close();
m_bOpenRes = false; return true;
}bool CDataProc::OpenRes(CString strSql)
{
if (false == m_bOpenRes)
{
m_pRecordSet->Open((_variant_t)strSql,m_pConnect.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
m_bOpenRes = true;
}
return true;
}
上面会报错:Onknown error 0x800A0CC1 ,望各位大虾请教
var = m_pRecordSet-> GetCollect(_T( "房号 ")); //此处出错
估计是字段没写对,用下面的方法捕捉错误,打印更详细一些估计就知道原因了。
//打印调用ADO控件时产生的详细错误信息
void dump_com_error(_com_error &e)
{
CString ErrorStr;
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());
ErrorStr.Format( "\n\tADO Error\n\tCode = %08lx\n\tCode meaning = %s\n\tSource = %s\n\tDescription = %s\n\n",
e.Error(), e.ErrorMessage(), (LPCTSTR)bstrSource, (LPCTSTR)bstrDescription );
//在调试窗口中打印错误信息,在Release版中可用DBGView查看错误信息
::OutputDebugString((LPCTSTR)ErrorStr);
#ifdef _DEBUG
AfxMessageBox(ErrorStr, MB_OK | MB_ICONERROR);
#endif
}try
{
//你的ADO代码
}
catch(_com_error& e)
{
dump_com_error(e);
}