我在采用ADO编程的时候,执行了一条查询语句,并已将查询值交给了pRecordset,下面我想读出字段"sg_time"中的数据,如下:
_variant_t sg_time;
......
while(遍历每条记录)
{
  sg_time = pRecordset->GetCollect("sg_time");
  
  ......
  pRecordset->MoveNext();
}
现在问题是"sg_time"不是个简单数据类型,而是smalltime型的,我想知道我得到的“_variant_t数据”本质上是个怎样的结构呢? 我怎样把他解读给我的简单变量呢?比如把smalltime解读成 int年 int月 int日,或是解读用户自建的数据类型?

解决方案 »

  1.   

    用纪录的IADORecordBinding接口可以
    先从CADORecordBinding派生一个自己的类
    用IADORecordBinding接口
    -----自己可以查查msdn。
    当然还有其他的办法。
      

  2.   

    可以得到一个表示时间的字符串
    是按yyyy-mm-dd来表示的,你自己格式化一下不就午了
      

  3.   

    COleDateTime oleDate;
    ...
    sg_time = pRecordset->GetCollect("sg_time");
    之后
    oleDate = sg_time;
    之后oleDate可以直接绑到DateTimePicker控件
    也可以
    CString strDate;
    strDate.Format("%d-%d-%d",oleDate.GetYear(),oleDate.GetMonth(),oleDate.GetDay());
      

  4.   

    使用COleDateTime反过来也可以
    sg_time = oleDate;
    如果oleDate直接绑到DateTimePicker控件,不需要设值
    否则可以这样
    oleDate.SetYear(1999);
    ...
    或者
    oleDate.ParseDateTime("1999-10-12");
      

  5.   

    typedef struct tagVARIANT  {
       VARTYPE vt;
       unsigned short wReserved1;
       unsigned short wReserved2;
       unsigned short wReserved3;
       union {
          LONGLONG                llval;             // VT_I8. 
          LONG                    lVal;              // VT_I4.
          BYTE                    bVal;              // VT_UI1.
          SHORT                   iVal;              // VT_I2.
          FLOAT                   fltVal;            // VT_R4.
          DOUBLE                  dblVal;            // VT_R8.
          VARIANT_BOOL            boolVal;           // VT_BOOL.
          SCODE                   scode;             // VT_ERROR.
          CY                      cyVal;             // VT_CY.
          DATE                    date;              // VT_DATE.
          BSTR                    bstrVal;           // VT_BSTR.
          IUnknown                * punkVal;         // VT_UNKNOWN.
          IDispatch               * pdispVal;        // VT_DISPATCH.
          SAFEARRAY               * parray;          // VT_ARRAY|*.
          BYTE                    * pbVal;           // VT_BYREF|VT_UI1.
          SHORT                   * piVal;           // VT_BYREF|VT_I2.
          LONG                    * plVal;           // VT_BYREF|VT_I4.
          LONGLONG                * pllVal;          // VT_BYREF|VT_I8.
          FLOAT                   * pfltVal;         // VT_BYREF|VT_R4.
          DOUBLE                  * pdblVal;         // VT_BYREF|VT_R8.
          VARIANT_BOOL            * pboolVal;        // VT_BYREF|VT_BOOL.
          SCODE                   * pscode;          // VT_BYREF|VT_ERROR.
          CY                      * pcyVal;          // VT_BYREF|VT_CY.
          DATE                    * pdate;           // VT_BYREF|VT_DATE.
          BSTR                    * pbstrVal;        // VT_BYREF|VT_BSTR.
          IUnknown                ** ppunkVal;       // VT_BYREF|VT_UNKNOWN.
          IDispatch               ** ppdispVal;      // VT_BYREF|VT_DISPATCH.
          SAFEARRAY               ** pparray;        // VT_ARRAY|*.
          VARIANT                 * pvarVal;         // VT_BYREF|VT_VARIANT.
          PVOID                   * byref;           // Generic ByRef.
          CHAR                    cVal;              // VT_I1.
          USHORT                  uiVal;             // VT_UI2.
          ULONG                   ulVal;             // VT_UI4.
          ULONGLONG               ullVal;            // VT_UI8.
          INT                     intVal;            // VT_INT.
          UINT                    uintVal;           // VT_UINT.
          DECIMAL                 * pdecVal          // VT_BYREF|VT_DECIMAL.
          CHAR                    * pcVal;           // VT_BYREF|VT_I1.
          USHORT                  * puiVal;          // VT_BYREF|VT_UI2.
          ULONG                   * pulVal;          // VT_BYREF|VT_UI4.
          ULONGLONG               * pullVal;         // VT_BYREF|VT_UI8.
          INT                     * pintVal;         // VT_BYREF|VT_INT.
          UINT                    * puintVal;        // VT_BYREF|VT_UINT.
       };
    };
      

  6.   

    small time ??你可以进行如下转换
    如果
    var.vt == VT_DATE;
    那么
    COleDateTime time = COleDateTime(var.date);
    ============================================================================
    提问题时标题要简明扼要地说明问题内容,切忌使用"急","求救"之类不能说明问题的标题
    http://alphasun.betajin.com/   遇到问题可以给我发消息,给我发信息时请附带原帖地址
    DocWizard C++程序文档自动生成工具 | Wave OpenGL | HttpProxy | AjaxParser词法分析
      

  7.   

    strDate.Format("%d-%d-%d",oleDate.GetYear(),oleDate.GetMonth(),oleDate.GetDay());
     应该是可以实现的