COleVariant var; 
db.Open("data.mdb"); // 打开已创建的demo数据库及DamoTable表
RecSet.Open(AFX_DAO_USE_DEFAULT_TYPE,"SELECT * FROM DemoTable",NULL);
RecSet.GetFieldValue("LiCheng",var);字段“LiCheng”类型为double,取得该字段的值后,怎么把他的值赋给一个dbl变量?

解决方案 »

  1.   

    给你一个COleVariant类型的转换为CString返回值的函数
    CString CDaoListView::Translate(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 V_BOOL(&var)?"TRUE":"FALSE";
    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){
    vt = vt & ~VT_ARRAY;
    strRet = _T("Array of ");
    }
    if(vt & VT_BYREF){
    vt = vt & ~VT_BYREF;
    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;
    }
      

  2.   

    如果知道数据库表中对应的数据类型,直接去访问
    例如是float的
    var.fltVal;
    int型的,var.intVal;
    长整型的:var.lVal;楼上的CDaoListView::Translate应该是出自于MFC的例子里,有个类叫做CCrack,只能将其转换为字符型的。