SQL 2005 中 CardStatusIDXF字段的类型 为smallintflag 为intflag=m_pRecordSet->GetCollect("CardStatusIDXF").iVal;
flag=m_pRecordSet->GetCollect("CardStatusIDXF").uiVal;
我先后以上两种方式取CardStatusIDXF字段的值都报错我屏蔽这个字段的获取 就不报错

解决方案 »

  1.   

    flag=(int)m_pRecordSet->GetCollect("CardStatusIDXF").uiVal;
    强制转换试试,另外你确定它是短整形吗
    你可以根据m_pRecordSet->GetCollect("CardStatusIDXF").vt来判断类型92.CString CConvert::ToString(const _variant_t& var)   
    93.{   
    94.    CString strValue;   
    95.    switch (var.vt)   
    96.    {   
    97.    case VT_BSTR: //字符串   
    98.    case VT_LPSTR:   
    99.    case VT_LPWSTR:   
    100.        strValue = (LPCTSTR)(_bstr_t)var;   
    101.        break;   
    102.    case VT_I1:   //无符号字符   
    103.    case VT_UI1:   
    104.        strValue.Format(_T("%d"), var.bVal);   
    105.        break;   
    106.    case VT_I2:   //短整型   
    107.        strValue.Format(_T("%d"), var.iVal);   
    108.        break;   
    109.    case VT_UI2:   //无符号短整型   
    110.        strValue.Format(_T("%u"), var.uiVal);   
    111.        break;   
    112.    case VT_INT: //整型   
    113.        strValue.Format(_T("%d"), var.intVal);   
    114.        break;   
    115.    case VT_I4:   //整型   
    116.    case VT_I8:   //长整型   
    117.        strValue.Format(_T("%d"), var.lVal);   
    118.        break;   
    119.    case VT_UINT:   //无符号整型   
    120.        strValue.Format(_T("%d"), var.uintVal);   
    121.        break;   
    122.    case VT_UI4:    //无符号整型   
    123.    case VT_UI8:    //无符号长整型   
    124.        strValue.Format(_T("%d"), var.ulVal);   
    125.        break;   
    126.    case VT_VOID:   
    127.        strValue.Format(_T("%08x"), var.byref);   
    128.        break;   
    129.    case VT_R4:   //浮点型   
    130.        strValue.Format(_T("%f"), var.fltVal);   
    131.        break;   
    132.    case VT_R8:   //双精度型   
    133.        strValue.Format(_T("%f"), var.dblVal);   
    134.        break;   
    135.    case VT_DECIMAL: //小数   
    136.        strValue.Format(_T("%f"), (double)var);   
    137.        break;   
    138.    case VT_CY:   
    139.        {   
    140.            COleCurrency cy = var.cyVal;   
    141.            strValue = cy.Format();   
    142.        }   
    143.        break;   
    144.    case VT_BLOB:   
    145.    case VT_BLOB_OBJECT:   
    146.    case 0x2011:   
    147.        strValue = _T("[BLOB]");   
    148.        break;   
    149.    case VT_BOOL:   //布尔型     
    150.        strValue = var.boolVal ? _T("TRUE") : _T("FALSE");   
    151.        break;   
    152.    case VT_DATE: //日期型   
    153.        {   
    154.            DATE dt = var.date;   
    155.            COleDateTime da = COleDateTime(dt);   
    156.            strValue = da.Format(_T("%Y-%m-%d %H:%M:%S"));   
    157.        }   
    158.        break;   
    159.    case VT_NULL://NULL值   
    160.    case VT_EMPTY:   //空   
    161.        strValue = _T("");   
    162.        break;   
    163.    case VT_UNKNOWN:   //未知类型   
    164.    default:   
    165.        strValue = _T("VT_UNKNOW");   
    166.        break;   
    167.    }   
    168.       
    169.    return strValue;   
    170.}  http://blog.csdn.net/Augusdi/archive/2010/06/21/5683097.aspx
      

  2.   

    在SQL 2005中   CardStatusIDXF字段的类型 为smallint
    是从数据库表中看的这个字段的属性
      

  3.   

    按说是不需要转换的,可以试一下:
    flag=int(m_pRecordSet->GetCollect("CardStatusIDXF"))

    flag=double(m_pRecordSet->GetCollect("CardStatusIDXF"))
      

  4.   

    刚才试了下flag=(int)m_pRecordSet->GetCollect("CardStatusIDXF").uiVal;还是不行 报错
      

  5.   

    flag=(int)m_pRecordSet->GetCollect("CardStatusIDXF");
    看看行不行,如果不行,你还是看看vt是什么类型,然后再调用对应成员变量
      

  6.   

    flag=(int)m_pRecordSet->GetCollect("CardStatusIDXF");编译出错
    error C2440: 'type cast' : cannot convert from 'class _variant_t' to 'int'
                        Ambiguous user-defined-conversion
      

  7.   

    _variant_t没有重载int类型

    flag=(short)m_pRecordSet->GetCollect("CardStatusIDXF");
    或者
    flag=(long)m_pRecordSet->GetCollect("CardStatusIDXF");
    试试