ado修改数据时,Recordser update()成功,但是并没有真正修改。奇怪~_ConnectionPtr pConn(__uuidof(Connection));
_RecordsetPtr pRst(__uuidof(Recordset));

pConn->ConnectionString="DRIVER={MySQL ODBC 5.1 Driver}; \
Data Source = trm_base"; try
{
HRESULT hr = pConn->Open("","","",adConnectUnspecified);
CString strSource = "select * from sys_dict \
where 类型='提醒类型' and 代码='2'";
HRESULT hr2 = pRst->Open(_variant_t(strSource),
_variant_t(pConn,true),
adOpenDynamic,
adLockOptimistic,
adCmdText);
}
catch (_com_error& err)
{
CString s;
s.Format("%s",err.Description());
}
while (!pRst->ADOEOF)
{
_variant_t varIndex("名称");
_variant_t varValue("3");
pRst->PutCollect(varIndex, varValue);
HRESULT hr = pRst->Update();//hr返回0值,但是update并未起作用,数据库未被更改
return;
}

解决方案 »

  1.   

    我对数据库事务机制不太了解~
    但是我没有BeginTrans,
    也不用提交了吧?我在操作access时,这个是没问题的,就是mysql出现的这个问题
      

  2.   

    MYSQL什么版本?
    直接用UPDATE SQL语句替换,结果如何
      

  3.   

    mysql 是5.0的
    我调用的是服务器上的数据库
    update 语句是没问题的添加一条新纪录,利用
    pRes->addnew
    pRes->putcollect
    pRes->update()
    这样都是没问题的就是修改有问题
    (我先select*出来一条记录到pRes,然后给pRes->putcollect进去,然后update()
    update()返回都是成功值,但是数据库就是没修改);
      

  4.   

    你的SELECT语句是什么?然后你是如何判断没有修改的?
      

  5.   

    select * from sys_dict \
    where 类型='提醒类型' and 代码='2'";是否有结果
      

  6.   

    select * from sys_dict \
    where 类型='提醒类型' and 代码='2'";
    这个语句是没问题的
    得到的pRes有一条记录
    _variant_t var = pRst->GetCollect("名称");
    可以返回数据库里的值服务器就在我边上我这里2台机器,我直接查的mysql数据库,知道没有修改成功
    没有出错提示,update都是成功的,
    我的mysql是uft8,中文字段,我正在试英文字段会不会有这个问题
      

  7.   

    获取连接以后,执行set names 'gbk'
    数据库服务器端也采用gbk或者utf8字符集。这样似乎有救。不过,不知道你的数据库采用的什么字符集。
    show variables like 'char%'版上有N多关于字符集方面的帖子,往前翻翻看
      

  8.   

    估计是字符集不统一
    show variables like 'char%'; 
      

  9.   

    数据库采用utf8
    估计是表结构出问题了,我再研究研究啊,谢谢大家了~