void CRSSRB::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
int m_reboc=0;
if (m_cb==0)
{
if (m_cr<2)
{
m_pRecordset->MoveFirst();  
m_pRecordset->Move(i+1);
temp=m_pRecordset->GetCollect("REBONUMBER");
if (temp.vt!=VT_NULL) m_reboc=(int)temp.lVal;

m_pRecordset->PutCollect(_variant_t("REBONUMBER"),_variant_t((long)(m_reboc+1)));
m_pRecordset-> Update(); 
                       MessageBox(_T("续借成功,谢谢您!"));
}
}
}每次运行到红色代码时总会出现下列错误:
跳转到这句话
inline void Recordset15::PutCollect ( const _variant_t & Index, const _variant_t & pvar ) {
    HRESULT _hr = put_Collect(Index, pvar);
    if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this));
}
错误提示是:程序0x7c812aab处未处理的异常:内存位置0x0012f1b4 处得_con_error有人知道是什么问题吗????????

解决方案 »

  1.   

    所有的ADO代码加异常捕获看是什么错误
    try
    {
    //你的ADO代码
    }
    catch (_com_error& e)
    {
    AfxMessageBox(e.Description());
    }
      

  2.   

    这个是系统自带的一个CPP里面的东西
      

  3.   

    他提示的是ROW-00009:不能更新只读rowset中的行。 
      

  4.   

    HRESULT _hr = put_Collect(Index, pvar);执行后,_hr的值是什么?
      

  5.   

    我后面加了try catch后他提示的就是row-00009:不能更新只读行。
      

  6.   

    m_pRecordset不能是Excute返回的或者用adLockReadOnly打开的记录集.
      

  7.   

    我打开的方式是:
    m_pRecordset->Open(_bstr_t(strSQL),m_Connection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);乐观锁有问题吗?
      

  8.   

    row-00009:不能更新只读行这不很明显了嘛
    为什么要改变结果?
      

  9.   

    如果要修改数据库内的值,写sql语句
      

  10.   

    我取出结果了
    这条语句就是先取出他的结果。temp=m_pRecordset->GetCollect("REBONUMBER");
                if (temp.vt!=VT_NULL)                m_reboc=(int)temp.lVal;
      

  11.   

    一般不会这样修改的.
    试下update t set f=? where ....