还是老问题,编码问题
非常奇怪的是可以addnew存储,但是修改就会失败,
我现在脑袋都大了
一下午就倒腾这玩意了~
_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);

pConn->Execute("set character_set_connection='utf8'",NULL,adCmdText);   
pConn->Execute("set character_set_results='utf8'",NULL,adCmdText);   
pConn->Execute("set character_set_client='utf8'",NULL,adCmdText);  CString strSource = "select * from updatetest \
where 姓名='张' and 年龄='十岁'";

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());
}
pRst->MoveFirst();
while (!pRst->ADOEOF)
{
_variant_t varIndex("姓名");
_variant_t varValue("胡");
                  //pRes->AddNew();  //这里如果addnew,则可以重新填充一条记录,没一点问题
pRst->PutCollect(varIndex, varValue);//假如这里修改,
HRESULT hr = pRst->Update();//这里会显示返回值成功,但是实际上数据库里并没有修改,
pRst->MoveNext();
}

解决方案 »

  1.   

    估计这 CString strSource = "select * from updatetest \
    where 姓名='张' and 年龄='十岁'";
    根本没有符合条件记录检查你的字符集。按下贴中检查方法贴出你的检查结果。
      

  2.   

    http://blog.csdn.net/ACMAIN_CHM/archive/2009/05/12/4174186.aspx
    MySQL 中文显示乱码
      

  3.   

    CString strSource = "select * from updatetest \
    where 姓名='张' and 年龄='十岁'"; 
    这个是有记录的variant_t var = pRst->GutCollect(varIndex);//假如这里修改,
    这样是可以得到var的值得的,没错的。。我可就纳闷了~
      

  4.   

    CString strSource = "select * from updatetest \
    where 姓名='张' and 年龄='十岁'";  
    这个是有记录的variant_t var = pRst->GetCollect(varIndex);//假如这里修改,
    这样是可以得到var的值得的,没错的。。我可就纳闷了~
      

  5.   

    打开你的MYSQL的普通查询日志功能,然后看看你的程序到底发送了SQL语句到数据库没有。 如果发送了,则看一下发送的语句到底是什么。如果没有发送,则可能是你的程序或者驱动的问题了。
      

  6.   

    如果查看日志,请参考手册中的说明。 MySQL官方文档 http://dev.mysql.com/doc/refman/5.1/zh/index.html
      

  7.   

    启动日志文件后,执行了一次,
    show master status;看不到一些有用的信息。直接打开日志文件,看到了下边一句话
    SET `濮撳悕`='閼? WHERE `濮撳悕`=_latin1'寮? where之后是 _latin1....,我就纳闷了,实际上我是已经查找到这条记录了
    我的mysql用的都是utf8编码,为什么where会_latin1 ?难不成他内部转来转去的?
    set `濮撳悕`='閼? 为什么这句就没_latin1 ?
    难道问题出这里了?
      

  8.   

    在执行前,先执行一次 "set names 'utf8'"
      

  9.   

    pConn->Execute("set character_set_connection='utf8'",NULL,adCmdText);   
    pConn->Execute("set character_set_results='utf8'",NULL,adCmdText);   
    pConn->Execute("set character_set_client='utf8'",NULL,adCmdText);  
    我在网上看的
    其实set names utf8影响的几个地方
    我安装mysql 的时候选择的是utf8
    所以my.ini文件里的database,server等都已经是uft8了
    只有上边的3个,需要设置,所以我添加了这三句话
    效果跟set names utf8是一样的
    而且我pConn->Execut("set names 'utf8'",NULL,adCmdText);   
    代码里根本不认这句话,说是错误命令
      

  10.   

    1、直接修改后,update(),日志显示
    UPDATE updatetest SET `濮撳悕`='姊?,`骞撮緞`='浜屽崄' WHERE `濮撳悕`=_latin1'寮? AND `骞撮緞`=_latin1'鍗佸瞾'  
    2、addnew()后,然后update日志显示
    INSERT INTO `trm_base`.`updatetest`(`濮撳悕`,`骞撮緞`) VALUES ('姊?,'浜屽崄') 
    3、直接利用sql语句update,日志显示
    update updatetest   set 濮撳悕='姊?,骞撮緞='浜屽崄'  where 濮撳悕='寮? and 骞撮緞='鍗佸瞾'勈銵发现:1中,日志有_latin1的转换,我日他的,
      

  11.   

    结贴了,问题已经解决,
    这是ado操作mysql的一个bug..