adowin32.exe 中的 0x7c812a5b 处未处理的异常: Microsoft C++ 异常: 内存位置 0x0012fbf0 处的 _com_error,如果把数据库换成access就没问题

解决方案 »

  1.   

    m_recordset->Open
    这个之前没有CreateInstance?
      

  2.   

    数据集指针没有创建会出现----同楼1或者没有释放~
    if(m_pRecordset->State)
    {
    m_pRecordset->Close();
    }
      

  3.   


    同样的代码我用access的时候没有出现过任何错误,但是用SQL SERVER2005把ACCESS替换的时候就出现了上面的问题,这是怎么回事?
      

  4.   

    我实例也创建了,释放也添加了,这个问题在连接access的时候没有出现过,在源代码只更换连接数据库语句的情况下为什么会出现这种情况?
      

  5.   

    用ADO,异常处理是重点,try{} catch 不可少。
      

  6.   

    这个部分的编程有不用TRY CATCH 的吗???
      

  7.   

    所有COM调用都要注意判断返回值。如果使用了智能指针或者封装类,需要使用try-catch块来捕捉错误;
    如果不想使用try-catch,可以直接调用原始接口方法,然后判断返回值。
      

  8.   

    inline _RecordsetPtr Connection15::Execute ( _bstr_t CommandText, VARIANT * RecordsAffected, long Options ) {
        struct _Recordset * _result = 0;
        HRESULT _hr = raw_Execute(CommandText, RecordsAffected, Options, &_result);
        if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this));
        return _RecordsetPtr(_result, false);
    }这是项目里面的msado15.tli,逐语句调试的时候说里面的return那句有问题,这应该怎么解决??
      

  9.   

    那条语句你怎么写的
    access和sql在某些语句上不一样
      

  10.   


    _bstr_t strconn="Provider=SQLOLEDB.1;Password=123456;Persist Security Info=True;User ID=Gavin;Initial Catalog=userman;Data Source=GAVIN\\SQLEXPRESS"; //连接
    try{pcon->Open(strconn,"","",NULL);}
    catch (_com_error &e)
    {

    AfxMessageBox(e.Description());
    }应该是这么写的吧?我的这个语句还是那天你教我的呢。
      

  11.   

    连接有问题??
    你不是execute才出现问题么?
      

  12.   

    try{}
    catch (_com_error &e)
    {AfxMessageBox(e.Description());

    捕捉异常,抱什么错?
      

  13.   

    连接的方法是你给我的方法,我觉得那个方法是最直观的了,不可能有错误。不是execute出现的问题,单纯的运行,刚开运行就直接关掉,在这段时间我就没有过任何操作
    异常根本就没有捕捉到,编译很顺利的就通过了
      

  14.   

    int main()
    {
    ::CoInitialize(NULL);
    _ConnectionPtr pConn(__uuidof(Connection));
    _RecordsetPtr pRst(__uuidof(Recordset)); pConn.CreateInstance(__uuidof(Connection));
    CString sql="select * from users";
    pConn->Open("Provider=SQLOLEDB.1;Password=123456;Persist Security Info=True;User ID=Gavin;Initial Catalog=userman;Data Source=GAVIN\\SQLEXPRESS","","",adModeUnknown); pRst=pConn->Execute((_bstr_t)sql,NULL,adCmdText); //读取数据
    _variant_t var;
    CString strName,strAge;
    strName=strAge="";

    if(!pRst->BOF)
    pRst->MoveFirst();
    else
    {
    cout<<"表内数据为空";
    return 0;
    }

    while(!pRst->adoEOF)
    {
    var = pRst->GetCollect("uid");
    if(var.vt != VT_NULL)
    cout<<"姓名:"<<(LPCTSTR)(_bstr_t)var<<"    ";
    var =pRst->GetCollect("uname");
    if(var.vt != VT_NULL)
    cout<<(LPCTSTR)(_bstr_t)var<<"岁"<<endl;
    pRst->MoveNext();
    } //结束工作
    pRst->Close();
    pConn->Close();
    pRst.Release();
    pConn.Release();
    CoUninitialize();
        getchar();
    return 1;
    }
      

  15.   

    你用个try{}
    catch (_com_error &e)
    {AfxMessageBox(e.Description());

    捕捉一下
      

  16.   

    pRst=pConn->Execute((_bstr_t)sql,NULL,adCmdText);不要用这种方法获得记录集..pRs->Open((_bstr_t)sql,_variant_t((IDispatch*)pConn,true),
    adOpenDynamic,adLockOptimistic,adCmdUnknown);这样试试..
      

  17.   


    还是刚才那个错误adowin32.exe 中的 0x7c812a5b 处未处理的异常: Microsoft C++ 异常: 内存位置 0x0012fbc0 处的 _com_error。有个警告:1>LINK : warning LNK4076: 无效的增量状态文件“.\Debug/adowin32.ilk”;正在非增量链接跟这个有关系么?
      

  18.   

    ...
    把相关代码都放在try中