CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com
Results 1 to 4 of 4
  1. #1
    Join Date
    May 1999
    Location
    RS, Brasil
    Posts
    9

    How can I retrieve the value stored in a COleVariant?

    I'm using the function CDaoRecordset::GetFieldValue() to get the value of a field in a Access table, and the value is stored in a COleVariant. How can I retrieve this value to add in a ComboBox for example? Is there a function to do this???


  2. #2
    Join Date
    May 1999
    Posts
    3,332

    Re: How can I retrieve the value stored in a COleVariant?

    use the V_BSTRT macro:
    CComboBox c;
    c.AddString(V_BSTRT(rs.GetFieldValue(...)));


  3. #3
    Join Date
    Apr 1999
    Location
    Melbourne, VIC
    Posts
    72

    Re: How can I retrieve the value stored in a COleVariant?

    Alternatively, use the CCrack class : as you can see, V_BSTRT is only good for strings.


    // crack.h :
    //
    // This is a part of the Microsoft Foundation Classes C++ library.
    // Copyright (C) 1992-1998 Microsoft Corporation
    // All rights reserved.
    //
    // This source code is only intended as a supplement to the
    // Microsoft Foundation Classes Reference and related
    // electronic documentation provided with the library.
    // See these sources for detailed information regarding the
    // Microsoft Foundation Classes product.

    class CCrack
    {
    public:
    static LPCTSTR strFieldType(short sType);
    static LPCTSTR strQueryDefType(short sType);
    static LPCTSTR strBOOL(BOOL bFlag);
    static CString strVARIANT(const COleVariant& var);
    };

    // crack.cpp
    //
    // This is a part of the Microsoft Foundation Classes C++ library.
    // Copyright (C) 1992-1998 Microsoft Corporation
    // All rights reserved.
    //
    // This source code is only intended as a supplement to the
    // Microsoft Foundation Classes Reference and related
    // electronic documentation provided with the library.
    // See these sources for detailed information regarding the
    // Microsoft Foundation Classes product.


    #include "stdafx.h"
    #include "crack.h"

    LPCTSTR CCrack::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 CCrack::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 CCrack::strBOOL(BOOL bFlag)
    {
    return bFlag ? _T("TRUE") : _T("FALSE");
    }

    CString CCrack::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){
    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;
    }







  4. #4
    Join Date
    May 1999
    Posts
    6

    Re: How can I retrieve the value stored in a COleVariant?

    If u are using vc6 ,
    u can retrieve the value like this
    COleVariant var;

    BOOl b = var.boolVal;
    CString str = var.pcVal;
    double d = var.dblVal;


Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  





Click Here to Expand Forum to Full Width

Featured