_variant_t var= m_pRecordset->GetCollect("");
CString str1,str2;
str1 = (LPCSTR)_bstr_t(var);
MessageBox(str1);//内容显示正确,和str2完全一样
str2.Compare(str1);//这里永远得不到0,为什么?我已经试了很多种类型转换的方法,好象都不行,WHY?我快崩溃了!

解决方案 »

  1.   

    不明白你的目的:
    看看这里希望有帮助
    http://dev.csdn.net/develop/article/12/12365.shtm
      

  2.   

    换一种方法比较两个数相等不行吗?题意还是不太明白呀。
    if (str1==str2)
    ...
      

  3.   

    你的str2从哪来的?
    还没有赋值嘛!
    怎么能和str1比较呢?
    不懂
      

  4.   

    一个封装好的类你可以用:
    class CVarConvertStr
    {// Operations
    public:
    static LPCTSTR strFieldType(short sType); 
    static LPCTSTR strQueryDefType(short sType); 
    static LPCTSTR strBOOL(BOOL bFlag); 
             //这个函数是你需要详细看的
    static CString strVARIANT(const COleVariant& var); };
    LPCTSTR CVarConvertStr::strFieldType(short sType) 

    switch(sType)

    case (dbBoolean): 
    return _T("Bool"); 
    case (dbByte): 
    return _T("Byte"); 
    case (dbInteger): 
    return _T("Integer"); 
    case (dbLong): 
    return _T("Long"); 
    case (dbCurrency): 
    return _T("Currency"); 
    case (dbSingle): 
    return _T("Single"); 
    case (dbDouble): 
    return _T("Double"); 
    case (dbDate): 
    return _T("Date"); 
    case (dbText): 
    return _T("Text"); 
    case (dbLongBinary): 
    return _T("Long Binary"); 
    case (dbMemo): 
    return _T("Memo"); 
    case (dbGUID): 
    return _T("GUID"); 

    return _T("Unknown"); 
    } LPCTSTR CVarConvertStr::strQueryDefType(short sType) 

    switch(sType){ 
    case (dbQSelect): 
    return _T("Select"); 
    case (dbQAction): 
    return _T("Action"); 
    case (dbQCrosstab): 
    return _T("Crosstab"); 
    case (dbQDelete): 
    return _T("Delete"); 
    case (dbQUpdate): 
    return _T("Update"); 
    case (dbQAppend): 
    return _T("Append"); 
    case (dbQMakeTable): 
    return _T("MakeTable"); 
    case (dbQDDL): 
    return _T("DDL"); 
    case (dbQSQLPassThrough): 
    return _T("SQLPassThrough"); 
    case (dbQSetOperation): 
    return _T("Set Operation"); 
    case (dbQSPTBulk): 
    return _T("SPTBulk"); 

    return _T("Unknown"); 
    } LPCTSTR CVarConvertStr::strBOOL(BOOL bFlag) 

    return bFlag ? _T("TRUE") : _T("FALSE"); 
    } CString CVarConvertStr::strVARIANT(const COleVariant& var) 

    CString strRet; 
    strRet = _T("Fish"); 
    switch(var.vt){ 
    case VT_EMPTY: 
    case VT_NULL: 
    strRet = _T("NULL"); 
    break; 
    case VT_I2: 
    strRet.Format(_T("%hd"),V_I2(&var)); 
    break; 
    case VT_I4: 
    strRet.Format(_T("%d"),V_I4(&var)); 
    break; 
    case VT_R4: 
    strRet.Format(_T("%e"),(double)V_R4(&var)); 
    break; 
    case VT_R8: 
    strRet.Format(_T("%e"),V_R8(&var)); 
    break; 
    case VT_CY: 
    strRet = COleCurrency(var).Format(); 
    break; 
    case VT_DATE: 
    strRet = COleDateTime(var).Format(_T("%m %d %y")); 
    break; 
    case VT_BSTR: 
    strRet = V_BSTRT(&var); 
    break; 
    case VT_DISPATCH: 
    strRet = _T("VT_DISPATCH"); 
    break; 
    case VT_ERROR: 
    strRet = _T("VT_ERROR"); 
    break; 
    case VT_BOOL: 
    return strBOOL(V_BOOL(&var)); 
    case VT_VARIANT: 
    strRet = _T("VT_VARIANT"); 
    break; 
    case VT_UNKNOWN: 
    strRet = _T("VT_UNKNOWN"); 
    break; 
    case VT_I1: 
    strRet = _T("VT_I1"); 
    break; 
    case VT_UI1: 
    strRet.Format(_T("0x%02hX"),(unsigned short)V_UI1(&var)); 
    break; 
    case VT_UI2: 
    strRet = _T("VT_UI2"); 
    break; 
    case VT_UI4: 
    strRet = _T("VT_UI4"); 
    break; 
    case VT_I8: 
    strRet = _T("VT_I8"); 
    break; 
    case VT_UI8: 
    strRet = _T("VT_UI8"); 
    break; 
    case VT_INT: 
    strRet = _T("VT_INT"); 
    break; 
    case VT_UINT: 
    strRet = _T("VT_UINT"); 
    break; 
    case VT_VOID: 
    strRet = _T("VT_VOID"); 
    break; 
    case VT_HRESULT: 
    strRet = _T("VT_HRESULT"); 
    break; 
    case VT_PTR: 
    strRet = _T("VT_PTR"); 
    break; 
    case VT_SAFEARRAY: 
    strRet = _T("VT_SAFEARRAY"); 
    break; 
    case VT_CARRAY: 
    strRet = _T("VT_CARRAY"); 
    break; 
    case VT_USERDEFINED: 
    strRet = _T("VT_USERDEFINED"); 
    break; 
    case VT_LPSTR: 
    strRet = _T("VT_LPSTR"); 
    break; 
    case VT_LPWSTR: 
    strRet = _T("VT_LPWSTR"); 
    break; 
    case VT_FILETIME: 
    strRet = _T("VT_FILETIME"); 
    break; 
    case VT_BLOB: 
    strRet = _T("VT_BLOB"); 
    break; 
    case VT_STREAM: 
    strRet = _T("VT_STREAM"); 
    break; 
    case VT_STORAGE: 
    strRet = _T("VT_STORAGE"); 
    break; 
    case VT_STREAMED_OBJECT: 
    strRet = _T("VT_STREAMED_OBJECT"); 
    break; 
    case VT_STORED_OBJECT: 
    strRet = _T("VT_STORED_OBJECT"); 
    break; 
    case VT_BLOB_OBJECT: 
    strRet = _T("VT_BLOB_OBJECT"); 
    break; 
    case VT_CF: 
    strRet = _T("VT_CF"); 
    break; 
    case VT_CLSID: 
    strRet = _T("VT_CLSID"); 
    break; 

    WORD vt = var.vt; 
    if(vt & VT_ARRAY)

    #pragma warning(disable : 4244) 
    vt = vt & ~VT_ARRAY; 
    #pragma warning(default : 4244) 
    strRet = _T("Array of "); 

    if(vt & VT_BYREF)
    {
    #pragma warning(disable : 4244) 
    vt = vt & ~VT_BYREF; 
    #pragma warning(default : 4244) 
    strRet += _T("Pointer to "); 

    if(vt != var.vt)

    switch(vt){ 
    case VT_EMPTY: 
    strRet += _T("VT_EMPTY"); 
    break; 
    case VT_NULL: 
    strRet += _T("VT_NULL"); 
    break; 
    case VT_I2: 
    strRet += _T("VT_I2"); 
    break; 
    case VT_I4: 
    strRet += _T("VT_I4"); 
    break; 
    case VT_R4: 
    strRet += _T("VT_R4"); 
    break; 
    case VT_R8: 
    strRet += _T("VT_R8"); 
    break; 
    case VT_CY: 
    strRet += _T("VT_CY"); 
    break; 
    case VT_DATE: 
    strRet += _T("VT_DATE"); 
    break; 
    case VT_BSTR: 
    strRet += _T("VT_BSTR"); 
    break; 
    case VT_DISPATCH: 
    strRet += _T("VT_DISPATCH"); 
    break; 
    case VT_ERROR: 
    strRet += _T("VT_ERROR"); 
    break; 
    case VT_BOOL: 
    strRet += _T("VT_BOOL"); 
    break; 
    case VT_VARIANT: 
    strRet += _T("VT_VARIANT"); 
    break; 
    case VT_UNKNOWN: 
    strRet += _T("VT_UNKNOWN"); 
    break; 
    case VT_I1: 
    strRet += _T("VT_I1"); 
    break; 
    case VT_UI1: 
    strRet += _T("VT_UI1"); 
    break; 
    case VT_UI2: 
    strRet += _T("VT_UI2"); 
    break; 
    case VT_UI4: 
    strRet += _T("VT_UI4"); 
    break; 
    case VT_I8: 
    strRet += _T("VT_I8"); 
    break; 
    case VT_UI8: 
    strRet += _T("VT_UI8"); 
    break; 
    case VT_INT: 
    strRet += _T("VT_INT"); 
    break; 
    case VT_UINT: 
    strRet += _T("VT_UINT"); 
    break; 
    case VT_VOID: 
    strRet += _T("VT_VOID"); 
    break; 
    case VT_HRESULT: 
    strRet += _T("VT_HRESULT"); 
    break; 
    case VT_PTR: 
    strRet += _T("VT_PTR"); 
    break; 
    case VT_SAFEARRAY: 
    strRet += _T("VT_SAFEARRAY"); 
    break;
    case VT_CARRAY: 
    strRet += _T("VT_CARRAY"); 
    break; 
    case VT_USERDEFINED: 
    strRet += _T("VT_USERDEFINED"); 
    break; 
    case VT_LPSTR: 
    strRet += _T("VT_LPSTR"); 
    break; 
    case VT_LPWSTR: 
    strRet += _T("VT_LPWSTR"); 
    break; 
    case VT_FILETIME: 
    strRet += _T("VT_FILETIME"); 
    break; 
    case VT_BLOB: 
    strRet += _T("VT_BLOB"); 
    break; 
    case VT_STREAM: 
    strRet += _T("VT_STREAM"); 
    break; 
    case VT_STORAGE: 
    strRet += _T("VT_STORAGE"); 
    break; 
    case VT_STREAMED_OBJECT: 
    strRet += _T("VT_STREAMED_OBJECT"); 
    break; 
    case VT_STORED_OBJECT: 
    strRet += _T("VT_STORED_OBJECT"); 
    break; 
    case VT_BLOB_OBJECT: 
    strRet += _T("VT_BLOB_OBJECT"); 
    break; 
    case VT_CF: 
    strRet += _T("VT_CF"); 
    break; 
    case VT_CLSID: 
    strRet += _T("VT_CLSID"); 
    break; 


    return strRet; 
    }
      

  5.   

    你的STR2的值是什么呀?
    他们可能本来就不等!!
      

  6.   

    STR2?在哪里赋值的?没有呀!
      

  7.   

    这个我刚弄好,希望能帮助楼主。
    try
    {
    LVITEM lvi;
    int nNumofCount;
    CString m_strTime;
    _variant_t id;
    m_pRecordset->MoveFirst();  
    while(!m_pRecordset->adoEOF)
    {
    lvi.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM;
    nNumofCount = m_lst.GetItemCount();
    lvi.iItem = nNumofCount;
    lvi.iSubItem = 0;
    id=m_pRecordset->GetCollect("jc_j_name");
    CString b=(char*)(_bstr_t)id;
    // CString a=(char*)(_bstr_t)(m_pRecordset->Fields->GetItem(_variant_t("jc_j_id"))->Value);
    lvi.pszText=b.GetBuffer(0);
    m_lst.InsertItem(&lvi);
    m_lst.SetItemText(nNumofCount,1,(_bstr_t)m_pRecordset->GetCollect("jc_j_add"));
    m_pRecordset->MoveNext();
    }
    m_pRecordset->Close();
    }
    catch (_com_error &e)
    {
    CString str=(char*)e.Description();
    ::MessageBox(NULL,str+"\n又出毛病了。:(","提示",MB_OK | MB_ICONWARNING);
    }