ADO访问数据库,根据输入的查询条件进行查询,然后修改满足条件的记录集中的一些字段,执行查询后如何处理?

解决方案 »

  1.   

    保持 where 语句如你的查询条件是
    sqlwhere = where name='newkey' and homepage='softwife'修改
    sql  = "update aa=aa" + sqlwhere
    execute(sql) 
      

  2.   

    update t1
    set aaa=111,bbb=222
    from 
    (select * from t1)
    where aaa=123
      

  3.   

    CString strSQL;
    int num1,num2;m_pRecordset.CreateInstance(__uuidof(Recordset));    strSQL.Format("SELECT * FROM demotable WHERE zonenum= %d AND unitnum= %d",num1,num2);
    _bstr_t sql=strSQL;
    try
    {
    m_pRecordset->Open( sql,//也可以去掉_bstr_t sql=strSQL,直接用(_variant_t)strSQL
                    theApp.m_pConnection.GetInterfacePtr(),
                                // 获取库接库的IDispatch指针
    adOpenDynamic,
    adLockOptimistic,
    adCmdText);
       
    }
    catch(_com_error *e)
    {
    AfxMessageBox(e->ErrorMessage());
    }
        try
    {
            while(!m_pRecordset->adoEOF)
    {
              ...............
      

  4.   

    5、修改数据
    方法一:
    try{
    m_pRecordset->MoveFirst(); 
    while(m_pRecordset->adoEOF==VARIANT_FALSE) 

    m_pRecordset->Fields->GetItem
    (_variant_t("姓名"))->Value=_bstr_t("赵薇");
    ......
    m_pRecordset->Update();m_pRecordset->MoveNext(); 
    }
    }//try
    改变了Value属性的值,即改变了字段的值。
    方法二:
    m_pRecordset->Fields->GetItem
    (_variant_t("姓名"))->PutValue(_bstr_t("赵薇"));
    方法三:就是用定义绑定类的方法(
      

  5.   

    再提供一段代码: 
    假如刚才通过执行SQL命令建立好的users表,它包含四个字段:ID,username,old,birthday以下的代码实现:打开记录集,遍历所有记录,删除第一条记录,添加三条记录,移动光标到第二条记录,更改其年龄,保存到数据库。
     _variant_t vUsername,vBirthday,vID,vOld;
    _RecordsetPtr m_pRecordset;
    m_pRecordset.CreateInstance("ADODB.Recordset");
    m_pRecordset->Open("SELECT * FROM users",_variant_t((IDispatch*)m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
    while(!m_pRecordset->adoEOF)

    vID = m_pRecordset->GetCollect(_variant_t((long)0));///取得第1列的值,从0开始计数,
    //你也可以直接给出列的名称,如下一行 
      vUsername = m_pRecordset->GetCollect("username");///取得username字段的值   
    vOld = m_pRecordset->GetCollect("old");  
     vBirthday = m_pRecordset->GetCollect("birthday");   ///在DEBUG方式下的OUTPUT窗口输出记录集中的记录   
    if(vID.vt != VT_NULL && vUsername.vt != VT_NULL && vOld.vt != VT_NULL && vBirthday.vt != VT_NULL)       
    TRACE("id:%d,姓名:%s,年龄:%d,生日:%s\r\n",vID.lVal,(LPCTSTR)(_bstr_t)vUsername,vOld.lVal,(LPCTSTR)(_bstr_t)vBirthday);   
    m_pRecordset->MoveNext();///移到下一条记录
    }
    m_pRecordset->MoveFirst();///移到首条记录
    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();///保存到库中   
      呵呵,仅供参考,我的一段程序刚刚从ODBC改为ADO的连接方式,