m_pRecordset5->Open( _variant_t("select * from DB_Employee where BMBH = '" + s_bmbh + "'"),
_variant_t((IDispatch *)m_pConnection),
adOpenDynamic,
adLockOptimistic,
adCmdText);

m_pRecordset5->MoveFirst();此时都是正常的,然后对其符合条件的记录进行修改,
while(!m_pRecordset5->adoEOF)
{
v_gzjb = m_pRecordset5->GetCollect("GZJB");  //工资级别
if(v_gzjb.vt != VT_NULL)
{
s_gzjb = (LPCSTR)_bstr_t(v_gzjb);
}
m_pCommand->CommandText = _bstr_t("Update DB_Employee set JBGZ = '"+ s_jbgz + "' where YGBH = '"+s_ygbh+"'");
m_pRecordset5 = m_pCommand->Execute(&vNULL,&vNULL,adCmdText);

m_pRecordset5->MoveNext();
} 在执行第一条记录的更新时,是完全正常的;但当第一次执行了更新之后,记录集的指针便无法移动了,而且报错。我测试了好长时间,估计是记录集的open参数有问题,但我觉得参数是没错的啊,请高手指教,谢谢!!

解决方案 »

  1.   

    m_pRecordset5 = m_pCommand->Execute(&vNULL,&vNULL,adCmdText);??
      

  2.   

    to wlzqi:我没有让它更新啊
      

  3.   

    你的那条update更新语句是对记录集中的所有行有效的,所以只需要执行一次就够了,不需要用while循环来一行行执行。出错的原因可能是第一次更新之后,指针已经移到结尾了。
      

  4.   

    此时都是正常的,然后对其符合条件的记录进行修改,
    if(!m_pRecordset5->adoEOF)
    {
    v_gzjb = m_pRecordset5->GetCollect("GZJB");  //工资级别
    if(v_gzjb.vt != VT_NULL)
    {
    s_gzjb = (LPCSTR)_bstr_t(v_gzjb);
    }
    m_pCommand->CommandText = _bstr_t("Update DB_Employee set JBGZ = '"+ s_jbgz + "' where YGBH = '"+s_ygbh+"'");
    m_pRecordset5 = m_pCommand->Execute(&vNULL,&vNULL,adCmdText);

    //m_pRecordset5->MoveNext();
    }这样就可以拉