本帖最后由 ivension 于 2009-11-23 21:29:43 编辑

解决方案 »

  1.   

    m_pRecordset前面没有Close掉吧?
      

  2.   

    参考下方法一(不带参数):// Add new record into this table:
    try
    {
        if(!m_pRecordset->Supports(adAddNew)) return;
        m_pRecordset->AddNew(); 
        m_pRecordset->Fields->GetItem(_variant_t("姓名"))->Value=_bstr_t("赵薇");
        m_pRecordset->Fields->GetItem(_variant_t("性别"))->Value=_bstr_t("女");
        m_pRecordset->Fields->GetItem(_variant_t("age"))->Value=_variant_t((short)20);
        m_pRecordset->Fields->GetItem(_variant_t("marry"))->Value=_bstr_t("未婚");
        m_pRecordset->Update(); 
    }//try
    catch (_com_error &e)
    {
        ::MessageBox(NULL, "又出毛病了。","提示",MB_OK | MB_ICONWARNING);
    }这种方法弄完了还要调用Update()。
    方法二(带参数):_variant_t varName[4],narValue[4];
    varName[0] = L"姓名";
    varName[1] = L"性别";
    varName[2] = L"age";
    varName[3] = L"marry";
    narValue[0]=_bstr_t("赵薇");
    narValue[1]=_bstr_t("女");
    narValue[2]=_variant_t((short)20);
    narValue[3]=_bstr_t("未婚");
    const int nCrit = sizeof varName / sizeof varName[0];// Create SafeArray Bounds and initialize the array
    SAFEARRAYBOUND rgsaName[1],rgsaValue[1];
    rgsaName[0].lLbound = 0; 
    rgsaName[0].cElements = nCrit;
    SAFEARRAY *psaName = SafeArrayCreate( VT_VARIANT, 1, rgsaName );
    rgsaValue[0].lLbound = 0;
    rgsaValue[0].cElements = nCrit;
    SAFEARRAY *psaValue = SafeArrayCreate( VT_VARIANT, 1, rgsaValue );// Set the values for each element of the array
    HRESULT hr1=S_OK.hr2=S_OK;for( long i = 0 ; i < nCrit && SUCCEEDED( hr1 ) && SUCCEEDED( hr2 );i++) 
    {     
        hr1=SafeArrayPutElement(psaName, &i,&varName[i]);
        hr2=SafeArrayPutElement(psaValue, &i,&narValue[i]);
    }// Initialize and fill the SafeArray
    VARIANT vsaName,vsaValue; 
    vsaName.vt = VT_VARIANT | VT_ARRAY;
    vsaValue.vt = VT_VARIANT | VT_ARRAY;
    V_ARRAY(&vsaName) = psaName;//&vsaName->parray=psaName;
    //see definition in oleauto.h file.
    V_ARRAY(&vsaValue) = psaValue;
       
    // Add a new record:
    m_pRecordset->AddNew(vsaName,vsaValue);//这种方法不需要调用Update,因为添加后,ADO会自动调用它。此方法主要是使用SafeArray挺麻烦。
      

  3.   

    m_pRecordset->MoveFirst(); // 之前要开,
      

  4.   

    还是推荐你看看这个完整的类,都写好了,而且做的也不错:
    http://www.codeproject.com/KB/database/caaadoclass1.aspx
      

  5.   

    谢谢各位,我在使用m_pRecordset先open,使用完后close了,
    现在又出新问题了,使用完后,提示遇到非法问题,需要关闭应用程序.
    不知道怎么回事?
      

  6.   

    现在又出新问题了,使用完后,提示遇到非法问题,需要关闭应用程序. 
    // 数据库操作都放到try{}catch(){}中去。
    // 请获取详细错误信息/