我用CRecordSet类定义m_pSet,做好CONNECT 和OPEN后执行
while (!m_pSet->IsEOF ()){
m_pSet->Edit ();
m_pSet->m_sumname="my na8lja";
if (!m_pSet->Update ())
MessageBox("unsuccessful");
m_pSet->MoveNext();
}但以上{}中的语句只执行<130次则可以正常执行,如果执行次数多于130次则出错
程序显示:更新或删除操作未涉及任何数据行
我查了一下MSDN好象说是CRecordSet::UPDATA不能处理太多的记录
请问有什么方法可以使以上语句正常执行

解决方案 »

  1.   

    直接用sql语句。 用ADO的 command 对象的execute()方法执行sql语句
      

  2.   

    我以前没用过基ADO,可否介结一下大概怎样用,谢谢
      

  3.   

    http://www.vckbase.com/document/viewdoc.asp?id=215
      

  4.   

    下面的代码是我从几个函数内拷贝出来的,直接执行是不行的,但你可一参考一下
    // 定义ADO连接、命令、记录集变量指针
    _ConnectionPtr m_connection;
    _CommandPtr m_command;
    _RecordsetPtr m_recordset;
    CString m_strSource;
    BOOL    m_fConnected;
    HRESULT hr;
    try{
    hr=m_connection.CreateInstance(__uuidof(Connection));
    if(SUCCEEDED(hr))
    hr=m_connection->Open(source,user,pwd,16);
            if(SUCCEEDED(hr))
    hr=m_command.CreateInstance(__uuidof(Command));
    if(SUCCEEDED(hr))
    hr=m_recordset.CreateInstance(__uuidof(Recordset));
    if(SUCCEEDED(hr))    
    m_fConnected=TRUE;
    else
    m_fConnected=FALSE;
    }
    catch(_com_error &e)
    {
    AfxMessageBox(e.ErrorMessage());
    m_fConnected=FALSE;
    }
    if(!m_fConnected) AfxMessageBox("ADO数据源初始化失败!");
    else m_strSource=(const char *)source; m_command->ActiveConnection=m_connection;


    strTableName=_T("t_oper_pas");
    strQuery.Format("insert into %s values(\'%s\',\'%s\',\'%s\',\'%s\') ", strTableName,m_i_id,m_i_name,m_i_pas,m_i_priv);
    query=strQuery;
     //   source= m_strSource; m_command->CommandText=query;
        try
    {
       m_command->Execute(NULL,NULL,adCmdText);
    }
    catch(_com_error &e)
    {
    // AfxMessageBox(e.ErrorMessage());
    AfxMessageBox(e.Description());
    }      
      

  5.   

    非常感谢上面各位的帮助,,我刚才看了上面qy789写的代码,有些不明,我打算再找些书好好看一下,不过不知上面各位知不知道有没有办法用CRecordSet类实现上面的功能。(很不好意识麻烦你们这么久)
      

  6.   

    用CRecordSet类的ExecuteSQL()方法也可以执行sql语句。你查查资料吧