代码:
try
{
    HRESULT hr;    hr = m_ptrConnect.CreateInstance(_uuidof(MatAdo::Connection));
    if( FAILED(hr) )
    {
        throw(_com_error(hr, NULL));
    }    hr = m_prtRecordset.CreateInstance(_uuidof(MatAdo::Recordset));
    if( FAILED(hr) )
    {
        throw(_com_error(hr, NULL));
    }    _bstr_t bstrConnectText(m_szDBConnText);
    hr = m_ptrConnect->Open(bstrConnectText, _T(""), _T(""), -1);
    if( FAILED(hr) )
    {
        throw(_com_error(hr, NULL));
    }    BSTR bstrSQL(m_szDBFormName);    hr = m_prtRecordset->Open(bstrSQL, m_ptrConnect.GetInterfacePtr(),
        MatAdo::adOpenDynamic, MatAdo::adLockOptimistic, MatAdo::adCmdTable);
    if( FAILED(hr) )
    {
        throw(_com_error(hr, NULL));
    }    MatAdo::FieldsPtr ptrFields = NULL;
    hr = m_prtRecordset->get_Fields(&ptrFields);
    if( FAILED(hr) )
    {
        throw(_com_error(hr, NULL));
    }    long iMaxCol = 0;
    hr = ptrFields->get_Count(&iMaxCol);
    if( FAILED(hr) )
    {
        throw(_com_error(hr, NULL));
    }    for(int iCol=0; iCol < iMaxCol; iCol++)
    {
        BSTR bstrColName;
        MatAdo::FieldPtr ptrField;        if( iCol==0 )
        {
            m_rptMainList.DeleteColumn(0);
        }        // 发生异常, "Unknown error 0x800A0CC1"
        // 看了ADO《Microsoft ADO程序员参考》上面写的是可以这样
        // 访问 Item 属性的, 这里为什么会出错? 在VC6下是可以, 为什
        // 在VC2005里面就会出错, VC2005只能用ADO.NET ?
        ptrField = ptrFields->Item[iCol];        //->get_Name(&bstrColName);        //m_rptMainList.InsertColumn(iCol,
        //  (LPCTSTR)(ptrFields->GetItem((_variant_t)1))->GetName(),
        //  LVCFMT_LEFT, 50);
    }
}
catch(_com_error& e)
{
    MessageBox(e.ErrorMessage(), _T("打开数据库错误"), MB_OK | MB_ICONERROR);
}

解决方案 »

  1.   

     这里应该不会有错误,检查下m_rptMainList的定义,我怀疑是这里的问题。
      

  2.   

    To: jhs1982419 
    m_rptMainList一直都没有使用呀,是 ptrField = ptrFields->Item[iCol]; 这句话出错了!
    To: shakaqrj
    刚试了一下,还是不行,一样出现了异常,我就郁闷了! 
      

  3.   

    恩?
    ptrFields->Item[(long)iCol]
    不要用ptrField接收,试试看
      

  4.   

    MatAdo::FieldsPtr ptrFields = NULL; 
    hr = m_prtRecordset->get_Fields(&ptrFields);
    -----------------------------------------------
    可能是get_Fields有问题吧参考如下代码:_RecordsetPtr m_pRecordset;FieldPtr pField = m_pRecordset->Fields->GetItem(lpFieldName);_variant_t vtIndex;

    vtIndex.vt = VT_I2;
    vtIndex.iVal = nIndex;FieldPtr pField = m_pRecordset->Fields->GetItem(vtIndex);
      

  5.   

    my_girlf  正解,多谢  :)