本人系VC和ADO的新手上路。
通过ADO获得查询结果集的方法我已掌握,
但不知道如何将新的数据插入到数据库当中。我在csdn中看到了
recordset.AddNew函数的说明,但不知道如何具体的应用,请前辈们
多多指教。另外,那里有好的关于ADO的资料也请指点一二。谢了!

解决方案 »

  1.   

    ②.添加记录
    新记录添加成功后,即自动成为当前记录。AddNew方法有两种形式,一个含有参数,而另一个则不带参数。
    方法一(不带参数):这种方法弄完了还要调用Update()。
    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();
    }
    catch (_com_error &e)
    {
    ::MessageBox(NULL,e.Description(),"提示信息",MB_OK | MB_ICONWARNING);
    return FALSE;
    }
    方法二(带参数):这种方法不需要调用Update,因为添加后,ADO会自动调用它。此方法主要是使用SafeArray挺麻烦。
    _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);
    方法三:就是用定义绑定类的方法(参考其它文献)。
      

  2.   

    Cdata data;
    data.AddrNew();
    data.item1=?
    data.item2=?
    ...
    data.Update();
    Cdata类的基类是CRecordset
      

  3.   

    m_pRecordset->Delete(adAffectCurrent);///删除当前记录
    ///添加三条新记录并赋值
    for(int i=0;i<3;i++){ m_pRecordset->AddNew();///添加新记录 m_pRecordset->PutCollect("ID",_variant_t((long)(i+10))); m_pRecordset->PutCollect("username",_variant_t("叶利钦")); m_pRecordset->PutCollect("old",_variant_t((long)71)); m_pRecordset->PutCollect("birthday",_variant_t("1930-3-15"));}
    m_pRecordset->Move(1,_variant_t((long)adBookFirst));///从第一条记录往下移动一条记录,即移动到第二条记录处m
    _pRecordset->PutCollect(_variant_t("old"),_variant_t((long)45));///修改其年龄
    m_pRecordset->Update();///保存到库中
      

  4.   

    就在csdn中vc版和文档中心搜索ado,哈哈有你想要的。