BOOL CAdoCtrl::InsertRow(_RecordsetPtr recordset, CStringArray &saValues)
{
int nColNum = 0;
//有效性检验
if(!m_bConnection) return FALSE;
if(0 == (nColNum = saValues.GetSize())) return FALSE;

//
HRESULT hr;
Fields* fields = NULL;
Field* field = NULL;
VARIANT varValue;
VARIANT varCount;
DataTypeEnum data_type;
varCount.vt = VT_I4;
try
{
hr = recordset->AddNew(); 
hr = recordset->get_Fields(&fields);
for(int i=0;i<nColNum;i++)
{
varCount.lVal = i;
hr = fields->get_Item(varCount, &field);
field->get_Type(&data_type); 
if(!ConstructVar(saValues.GetAt(i), data_type, &varValue)) return FALSE;
              //*****************此处曾出现在
              //:“多步OLE DB操作产生错误,请检查每一个OLE DB状态值。”
hr = field->put_Value(varValue);
}
fields->Release();
field->Release();
}
catch (_com_error &e)
{
   AfxMessageBox(e.ErrorMessage()); 
   return FALSE;
}

return (SUCCEEDED(hr));
}这个函数能顺利执行完毕,但没能将数据与入到数据库中。我在跟踪时发现当执行到最后一个CArray对象时,varValue显示:“多步OLE DB操作产生错误,请检查每一个OLE DB状态值。”
1、不知道这个操作错误的产生都与何有关?
2、每个OLE DB状态值是指哪个?如何检查?
在这里谢谢大家先了。

解决方案 »

  1.   

    是因为有些字段如IDENTITY等类型的不允许更新,但是缺要赋值更新,还有就是有些字段不允许空值,缺赋给了空值等,因为update是更新一条记录,所以当一个或多个字段更新失败的时候,就会出现“多步OLE DB操作产生错误,请检查每一个OLE DB状态值”
      

  2.   

    AddNew或者Edit之后,要Update,这样,修改后的数据才会从缓冲区输入到数据库中。