COleVariant invValue;
VariantInit(invValue);......invValue = GetRangeVaue(***);//这个函数从Excel中取值返回COleVariant类型,
                             //且返回后invValue有值,例如"1队"
drsRec->SetFieldValue(i,invValue);//drsrec是CDaoRecordset对象,提问:这里的invValue保存   
                                  //   到access里变成乱码,咋整?为什么?

解决方案 »

  1.   

    COleVariant vResult =range.GetValue();
    CString str;
    if(vResult.vt == VT_BSTR)       //字符串
    {
    str=vResult.bstrVal;
    }
    else if (vResult.vt==VT_R8)     //8字节的数字 
    {
    str.Format("%f",vResult.dblVal);
    }
    else if(vResult.vt==VT_DATE)    //时间格式
    {
    SYSTEMTIME st;
    VariantTimeToSystemTime(vResult.date, &st);
    }
    else if(vResult.vt==VT_EMPTY)   //单元格空的
    {
    str="";
    }  
    drsRec->SetFieldValue(i,str);
      

  2.   

    楼上的固然可以解决,但是问题没有分析清楚.
    为什么invValue SetFieldValue(),到access里是乱码?什么原因?字体?
      

  3.   

    COleVariant类是对VARIANT结构的封装。当对象构造时首先调用VariantInit进行初始化,然后根据参数中的标准类型调用相应的构造函数,并使用VariantCopy进行转换赋值操作,当VARIANT对象不在有效范围时,它的析构函数就会被自动调用,由于析构函数调用了VariantClear,因而相应的内存就会被自动清除。
      

  4.   

    VariantCopy还是乱码.从excel到access variant类型的值有什么动静?