我在MFC中通过ADO连接了mysql,查询表内的数据都没问题,今天想去修改表中的一个数据,通过:
m_pRecordset.CreateInstance(__uuidof(Recordset));
m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),AdOpenDynamic,adLockOptimistic,adCmdText);
得到了一个记录集,然后通过:
pSet->PutCollect("什么东西",_variant_t(comment));
CString comment_1=(LPCTSTR)(_bstr_t)pSet->GetCollect("什么东西");
AfxMessageBox(comment_1);
pSet->Update();
想去修改表中的其中一行的某个数据,AfxMessageBox弹出的数据是对的,但是在mysql里面去查看数据却没有改变,请教各位是什么原因呢?
另外用pSet->AddNew()的方法又可以添加成功数据。

解决方案 »

  1.   

    m_pRecordset和pSet是同一个数据集吗?
      

  2.   

    是的。数据集应该没有问题,因为我用pSet去查询数据得到的结果是正确的,另外用pSet->AddNew()也能正确执行。就是修改数据和删除数据出问题。
      

  3.   

    试试用SQL语句来做修改和删除。
      

  4.   

    您的意思是在mysql中用SQL语句吗?这个我不会,我是在PHPMYADMIN里面可视化操作,可以进行修改和删除。
      

  5.   

    另外我在网上搜了一下,有人说是记录集打开的参数设置不对导致,但是我的这三个:AdOpenDynamic,adLockOptimistic,adCmdText应该是可以的吧?
      

  6.   

    也有可能是参数有问题,AdOpenDynamic可以换成其他参数试试。
      

  7.   


    哈哈。改成了adOpenForwardOnly以后就可以了。修改和删除都能执行。
    但目前只知道然,不知道所以然。
    我只改了光标的类型,为什么对写数据会有影响呢?或者是对写没有影响,是对UpDate()有影响,我对它的机制不了解,可以给我科普一下吗?
      

  8.   

    我现在再改回adOpenDynamic以后,执行完putcollect执行update()的时候怎么就跳出“runtime error!"了?这是怎么回事呢?其他我什么都改过。
      

  9.   

    有的数据库驱动程序不支持adOpenDynamic,有的支持adOpenDynamic。