_variant_t var= m_pRecordset->GetCollect("");
CString str1,str2;
str1 = (LPCSTR)_bstr_t(var);
MessageBox(str1);//内容显示正确,和str2完全一样
str2.Compare(str1);//这里永远得不到0,为什么?我已经试了很多种类型转换的方法,好象都不行,WHY?我快崩溃了!
CString str1,str2;
str1 = (LPCSTR)_bstr_t(var);
MessageBox(str1);//内容显示正确,和str2完全一样
str2.Compare(str1);//这里永远得不到0,为什么?我已经试了很多种类型转换的方法,好象都不行,WHY?我快崩溃了!
看看这里希望有帮助
http://dev.csdn.net/develop/article/12/12365.shtm
if (str1==str2)
...
还没有赋值嘛!
怎么能和str1比较呢?
不懂
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;
}
他们可能本来就不等!!
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);
}