m_pRecordset->Open(bstrSQL, m_pConnection.GetInterfacePtr(),  adOpenDynamic, adLockOptimistic, adCmdText);
bstrSQL = "execute 存储过程"
或者
m_pRecordset->Open(bstrSQL, m_pConnection.GetInterfacePtr(),  adOpenDynamic, adLockOptimistic, adCmdStoredProc);
bstrSQL = "存储过程"
这样创建的Recordset不能被修改
报错为对象打开时不能被操作
寻求大家的帮助,谢谢啦!

解决方案 »

  1.   

    bstrSQL = "execute 存储过程" 
    m_pRecordset->Open(bstrSQL, m_pConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText);
    写到上边
      

  2.   

    吧这个换一个试试:adLockOptimistic
      

  3.   

    这样创建的Recordset不能被修改 
    报错为对象打开时不能被操作 你先打开了,不能操作,按宝鸭的,放上边试试
      

  4.   

    换一个锁类型用adLockPessimistic
      

  5.   

    adLockBatchOptimistic
    adLockOptimistic
    adLockPessimistic
    都试过了,还是不行
    adLockReadOnly这个肯定是不行的了sql语句自然是在上面了,这样的错误还是不会犯的啦
      

  6.   

    问题修改为:bstrSQL = "execute 存储过程"
    m_pRecordset->Open(bstrSQL, m_pConnection.GetInterfacePtr(),  adOpenDynamic, adLockOptimistic, adCmdText);或者
    bstrSQL = "存储过程"
    m_pRecordset->Open(bstrSQL, m_pConnection.GetInterfacePtr(),  adOpenDynamic, adLockOptimistic, adCmdStoredProc);这样创建的Recordset不能被修改
    报错为对象打开时不能被操作
    寻求大家的帮助,谢谢啦!adLockBatchOptimistic
    adLockOptimistic
    adLockPessimistic
    都试过了,还是不行
      

  7.   

    用静态游标试试。不同选项是不同的,看一下帮助吧。
    m_pRecordset->Open(bstrSQL, m_pConnection.GetInterfacePtr(), adOpenStatic, adLockOptimistic, adCmdText); 
      

  8.   

    不知道你到底想修改成什么,RECORDSET返回结果集,一般都是读取结果集吧
      

  9.   

    我想在读取Recordset的时候,更新里面某个字段的值。。重新仔细检查代码的时候,发现尝试更新Recordset的属性,导致上面的错误。修改之后,调用update方法,报错为“在获取新的句柄之前,必须释放所有的行句柄。”
      

  10.   

    把打开的RECORDSET关掉再执行下一个语句。用CLOSE方法
      

  11.   

    但是我要依靠这个Recordset对数据进行更新啊,像下面这样if(pRecordset!=NULL && !pRecordset->EndOfFile){
    pRecordset->MoveFirst();
    while(!pRecordset->EndOfFile){
    cout << (_bstr_t)pRecordset->GetCollect("id") << endl;
    ......
    pRecordset->PutCollect(.....); //这里就会报错。。
    pRecordset->Update();
    pRecordset->MoveNext();
    }
    pRecordset->Close();

    }