当前位置:Gxlcms > mysql > ADO访问Access数据库错误解决

ADO访问Access数据库错误解决

时间:2021-07-01 10:21:17 帮助过:17人阅读

欢迎进入C/C++编程社区论坛,与300万技术人员互动交流 >>进入 最近在用ADO访问Access数据库的时候出现了一个奇怪的错误,觉得有必要记录下来,和大家分享一下。 环境 win7 x86系统; VS2012编译器; Office2010; Access2000~Access2003连接串建立数据库连接

欢迎进入C/C++编程社区论坛,与300万技术人员互动交流 >>进入

最近在用ADO访问Access数据库的时候出现了一个奇怪的错误,觉得有必要记录下来,和大家分享一下。

环境

win7 x86系统;

VS2012编译器;

Office2010;

Access2000~Access2003连接串建立数据库连接。

关键数据库操作代码

BOOL CAccessDatabase::Query(const CString strSQLString, UINT nFieldNumber, vector >& vecvecVariant)

{

_variant_t Variant;

vector<_variant_t> vecVariant;

EnterCriticaldiv(&m_cs);

_RecordsetPtr pRecordset = NULL;

HRESULT hr = S_FALSE;

try

{

hr = pRecordset.CreateInstance(_T("ADODB.Recordset"));

if (SUCCEEDED(hr))

{

hr = pRecordset->Open(strSQLString.AllocSysString(), m_pConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText);

if (SUCCEEDED(hr))

{

if (!pRecordset->adoEOF)

{

hr = pRecordset->MoveFirst();

if (SUCCEEDED(hr))

{

while (!(pRecordset->adoEOF))

{

vecVariant.clear();

for (UINT i = 0; i < nFieldNumber; ++i)

{

ZeroMemory(&Variant, sizeof(Variant));

Variant = pRecordset->GetCollect(_variant_t((long)i));

vecVariant.push_back(Variant);

}

vecvecVariant.push_back(vecVariant);

hr = pRecordset->MoveNext();

}

}

else

{

m_pLogFile->WriteLog(GetLastError(), _T("移动记录集指针到首部发生错误"));

if (pRecordset->GetState() != adStateClosed)

{

hr = pRecordset->Close();

if (FAILED(hr))

{

m_pLogFile->WriteLog(GetLastError(), _T("关闭记录集失败"));

}

else

{

m_pLogFile->WriteLog(GetLastError(), _T("记录集已关闭"));

}

}

if (pRecordset != NULL)

{

pRecordset.Release();

pRecordset = NULL;

}

LeaveCriticaldiv(&m_cs);

return FALSE;

}

}

else

{

m_pLogFile->WriteLog(GetLastError(), _T("查询的记录集为空"));

}

}

else

{

m_pLogFile->WriteLog(GetLastError(), _T("打开记录集失败"));

if (pRecordset != NULL)

{

pRecordset.Release();

pRecordset = NULL;

}

LeaveCriticaldiv(&m_cs);

return FALSE;

}

}

else

{

m_pLogFile->WriteLog(GetLastError(), _T("初始化记录集失败"));

pRecordset = NULL;

LeaveCriticaldiv(&m_cs);

return FALSE;

}

}

[1] [2]

人气教程排行