ADO访问数据库的“指针错误”ErrorID = 0x80004003 的解决

当使用ADO访问数据库时遇到0x80004003错误,即"指针错误",可能是ADO组件问题。通过在其他机器上测试确认问题,并通过在命令行注册msado15.dll或替换损坏文件来修复此问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天一个朋友问我,如下代码出现错误,错误号是80004003,错误含义是“指针错误”。

 

 

BOOL CADODatabase::Open(LPCTSTR lpstrConnection, LPCTSTR lpstrUserID, LPCTSTR lpstrPassword)
{
    HRESULT hr = S_OK;

    if(IsOpen())
        Close();

    if(strcmp(lpstrConnection, _T("")) != 0)
         m_strConnection = lpstrConnection;

    ASSERT(!m_strConnection.IsEmpty());

     try
     {
        if(m_nConnectionTimeout != 0)
            m_pConnection->PutConnectionTimeout(m_nConnectionTimeout);
        hr = m_pConnection->Open(_bstr_t(m_strConnection), _bstr_t(lpstrUserID), _bstr_t(lpstrPassword), NULL);
        return hr == S_OK;
    }
    catch(_com_error &e)
    {
        dump_com_error(e);
        return FALSE;
    } 
}

 

void CADODatabase::dump_com_error(_com_error &e)
{
    CString ErrorStr;
     _bstr_t bstrSource(e.Source());
    _bstr_t bstrDescription(e.Description());
    ErrorStr.Format( "CADODataBase Error/n/tCode = %08lx/n/tCode meaning = %s/n/tSource = %s/n/tDescription = %s/n",
                                 e.Error(), e.ErrorMessage(), (LPCSTR)bstrSource, (LPCSTR)bstrDescription );
    m_strLastError = _T("Connection String = " + GetConnectionString() + '/n' + ErrorStr);
    m_dwLastError = e.Error();

    AfxMessageBox( ErrorStr, MB_OK | MB_ICONERROR );
}

 

CString strConnection = _T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=dbTest.mdb");
 if(m_pDb.Open(strConnection))
 { 
    m_pRs = CADORecordset(&m_pDb);

    if(m_pRs.Open("tblTest", CADORecordset:SurprisepenTable))
    {
        m_datagridctrl.SetCaption("Clients");
        m_datagridctrl.SetRefDataSource(NULL);
        m_datagridctrl.SetRefDataSource((LPUNKNOWN)m_pRs.GetRecordset());
        m_datagridctrl.Refresh();
    }
}
else
{
    AfxMessageBox(m_pDb.GetLastErrorString());
    DWORD dwError = m_pDb.GetLastError();
    return FALSE;
}

 

 

根据错误含义“错误指针”分析,似乎是代码自身的问题。当时怀疑是参数的问题,查看代码确定不会是参数引起。就怀疑是ADO,同时这里也是ADO抛出的异常。因此极有可能是ADO组件的问题。为了确定这点,先找其他机器测试。找了其他一台机器测试后果然正常。因此可以确定是那台机器的ado组件没安装好(极有可能是部分受损)。可以采用如下方法解决:

1.在C:/Program Files/Common Files/System/ado下找到msado15.dll 

   在命令行输入命令:  regsvr32    C:/Program Files/Common Files/System/ado/msado15.dll

   回车后,注册该ado模块(如果注册失败,可以将当前路径先到C:/Program Files/Common Files/System/ado目录再进行注册)

 

  运用后能正常。

 

2.如果如上操作后问题仍然存在,可以将正常机器上的msado15.dll文件复制到 损坏的机器上。再进行第一步的注册操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值