您好,欢迎访问一九零五行业门户网

ADO访问Access数据库错误解决

欢迎进入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 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
    {
    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]
其它类似信息

推荐信息