CDaoRecordset RecSet(&m_db);

    COleVariant var,var1,var2,var3;
var.ChangeType(VT_R8,NULL);
var1.ChangeType(VT_BSTR,NULL);
var2.ChangeType(VT_R8,NULL);
var3.ChangeType(VT_R8,NULL);
CString strSql;
int n1 = 0;
n1 = str1.Find(" ",0);
str1 = str1.Right(str1.GetLength() - n1 - 1); strSql.Format("select * from hqp5 where carnum like '*%s*'", str1);
RecSet.Open(AFX_DAO_USE_DEFAULT_TYPE,strSql,NULL);
if(RecSet.GetRecordCount() < 1)
{
RecSet.Close(); strSql.Format("select * from hqp5");
                  RecSet.Open(AFX_DAO_USE_DEFAULT_TYPE,strSql,NULL);
RecSet.AddNew();
var1 = CString(str1);
RecSet.SetFieldValue("carnum",var1);
         var2 = double(x);
RecSet.SetFieldValue("df_x",var2);
var3 = double(y);
RecSet.SetFieldValue("df_y",var3);
                  RecSet.Update();
RecSet.Close();以上这段代码是往表中加如3个值.后面2个double类型的都没问题,但CString类型的却有问题.
比如是"1901",但到数据库后只剩下"1"了.数据库ACCESS的carnum设置成文本类型的,用了最大的
空间.但还是不行.希望高手们帮下我.up有分

解决方案 »

  1.   

    你都写了啊,varl是BSTR不是CString啊CString::AllocSysString
      

  2.   

    BSTR是宽字节的阿,要变为char*。
      

  3.   

    你把RecSet.SetFieldValue("carnum",var1);
    改成
    RecSet.SetFieldValue("carnum",_variant_t(str1));
    试下
      

  4.   

    var1.ChangeType(VT_BSTRT,NULL); 你把RecSet.SetFieldValue("carnum",var1);
    改成
    RecSet.SetFieldValue("carnum",_variant_t(str1));
    试下
    ==============================================
    这2个我试了,都没有好用此外,我还加了句
    BSTR bstr = str1.AllocSysString();
    但不知道怎么转化成char类型,然后怎么和var1联系上.
      

  5.   

    unicode的问题,单字节和双字节数据类型的问题。
      

  6.   

    m_RS->PutCollect(_variant_t(列名),_variant_t(字串));
      

  7.   

    WideCharToMultiByte用这个函数转换。或者自己把多余的0去掉。
      

  8.   

    n1 = str1.Find(" ",0);
    str1 = str1.Right(str1.GetLength() - n1 - 1);不知道楼主这两句是什么意思?干什么用的?