可以正常的打开数据库,读取记录,但是执行pRst->Delete(adAffectCurrent)时总是出现错误,而且是Unknown error 0x800A0CB3

解决方案 »

  1.   

    加异常捕获看是什么错误
    try
    {
    //你的ADO代码
    }
    catch (_com_error& e)
    {
    CString strMsg;
    strMsg.Format(_T("错误描述:%s\n错误消息%s", 
    (LPCTSTR)e.Description(),
    (LPCTSTR)e.ErrorMessage());
    AfxMessageBox(strMsg);
    }
      

  2.   

    谢谢 我试了 结果出现这个错误描述是:当前记录集不支持更新。这可能是提供程序的限制,也可能是选定锁定类型的限制。错误信息是:Unknown error 0x800A0CB3
    我是刚开始学习这个知识 不太明白这个 是我打开结果集的部分就已经有错误了嘛 
    pRst->Open("select * from dept",pConn.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
    while (!pRst->adoEOF)
    {
    pRst->MoveFirst();
    pRst->Move(1);
    pRst->Delete(adAffectCurrent);
    pRst->Update();
    AfxMessageBox("删除完毕!");
    pRst->Close(); 
    }
      

  3.   

    pRst->Move(1);先屏蔽掉试试。不能在循环里面关闭记录集。while (!pRst->adoEOF)
    {
    pRst->MoveFirst();
    pRst->Delete(adAffectCurrent);
    pRst->Update();}
    AfxMessageBox("删除完毕!");
    pRst->Close(); 那样的话用SQL来删除好一些。
    DELETE FROM dept
      

  4.   

    pRst->Open("select * from dept",pConn.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
    while (!pRst->adoEOF)
    {
    pRst->MoveFirst();
    pRst->Move(1);
    pRst->Delete(adAffectCurrent);
    pRst->Update();
    AfxMessageBox("删除完毕!");
    pRst->Close();  
    }
    严重错误。
    在while外面close
      

  5.   

    按你的思路,应该是这样
    先select
    如果有值,先close,再delete
    如果无值,直接close
    其实你直接写delete的sql更方便,还不需要close
      

  6.   

    谢谢两位 我写的那个还是不对 把close放到外面也不行 改成下面这样用delete的sql语句写可以删除
    pRst=pConn->Execute("delete  from STUDENT where SNAME='张立'",NULL,adCmdText);
    这是为什么啊 
      

  7.   

    执行sql语句呗。
    你pConn->Open("delete...",...)都可以,自己试试。
      

  8.   

    应该不是 因为用sql语句的delete是可以删除的
      

  9.   

    谢谢各位的帮助 问题已经解决了 前面加上pConn->CursorLocation=(CursorLocationEnum)3;这条语句就好了
      

  10.   

    pConn->CursorLocation=(CursorLocationEnum)3;这条语句是什么意思啊??