ADO中使用AddNew增加记录的时候,如果主键重复出错,就增加不进去,这时调用Close()出错,怎么处理

解决方案 »

  1.   

    VARIANT varImageBLOB[10];//近景数据块
    bool bRet;
    COleSafeArray vaFieldlist; //用安全数组定义数据库字段列表
    COleSafeArray vaValuelist;      //用安全数组定义数据库字段内容列表
    try
    {
    vaFieldlist.CreateOneDim(VT_VARIANT, nFieldNum+1); //创建一维的字段列表
    long lArrayIndex[1]; //访问字段列表所需的长整形 lArrayIndex[0] = 0;
    vaFieldlist.PutElement(lArrayIndex,&(_variant_t(strField)));
    for(int i=0;i<nFieldNum;i++)
    {
    lArrayIndex[0] = i+1;
    vaFieldlist.PutElement(lArrayIndex,&(_variant_t(strImageField[i])));
    }
    //加入所要插入的记录
    vaValuelist.CreateOneDim(VT_VARIANT, nFieldNum+1); lArrayIndex[0] = 0; //选中字段0
    CString strTemp=strSerialNum;
    vaValuelist.PutElement(lArrayIndex,&(_variant_t(strTemp.GetBuffer(strTemp.GetLength())))); //记录编号 for(i=0;i<nFieldNum;i++)
    {
    BlobToVariant(varImageBLOB[i],strBuf[i],nFileLen[i]);
    lArrayIndex[0] = i+1;
    vaValuelist.PutElement(lArrayIndex,&varImageBLOB[i]);//近景
    }
    m_Recordset.GetActiveRecordsetPtr()->AddNew(vaFieldlist, vaValuelist);
    bRet=true;
    }
    catch(_com_error &e)
    {
    // Any failure in adding a new column cancel the update
    DumpError(e);
    bRet=false;
    }
    for(int i=0;i<nFieldNum;i++)
    {
    VariantClear(&varImageBLOB[i]);
    }
    vaValuelist.Clear();
    vaFieldlist.Clear();
    return bRet;
    在捕获异常中应该怎么处理啊
      

  2.   

    要CancelUpdate以后再Close给一个思路:
    在AddNew之前,不妨按照你要新加记录的关键字查询记录集