RecordSet->MoveFirst();
while (!RecordSet->adoEOF) 
{
  RecordSet->PutCollect("Value", _variant_t(10.2f));
  RecordSet->Update();
  RecordSet->MoveNext();
}注:当表中的记录小于9000多条时可以修改成功,当表中的记录大于9000多条时则修改失败。
不知道如何解决?

解决方案 »

  1.   

    在ado的时候,使用RecordSet对于特定的字段更新总是出现 idispatch #3105 error. 发现原因是这样的:
     在数据库中有些字段是字符串类型,允许为NULL,但是长度不允许为空.如果当数据为NULL的时候读取了数据,但是未经处理又需要插入的时候,可能会变成长度为空的字符串,这时进行插入或者更新时就会报#3105错误.
     解决办法:声明_variant_t 类型,将其类型值设为 VT_NULL,然后用PutCollect放到RecordSet 里面就好了:
     _variant_t myValue;
     myValue.vt = VT_NULL;
     m_pRecordset->PutCollect("FieldName1",myValue);
     m_pRecordset->Update();   所以这类问题一般都是类型不符或者格式匹配。
      

  2.   

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

  3.   


    try
    {
    //你的ADO代码
    }
    catch (_com_error& e)
    {
    AfxMessageBox(e.Description());
    }
    捕获错误就是IDispatch error #3105但不知道为什么记录较少时能操作成功,记录较多时就会失败。