我在采用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日,或是解读用户自建的数据类型?
_variant_t sg_time;
......
while(遍历每条记录)
{
sg_time = pRecordset->GetCollect("sg_time");
......
pRecordset->MoveNext();
}
现在问题是"sg_time"不是个简单数据类型,而是smalltime型的,我想知道我得到的“_variant_t数据”本质上是个怎样的结构呢? 我怎样把他解读给我的简单变量呢?比如把smalltime解读成 int年 int月 int日,或是解读用户自建的数据类型?
先从CADORecordBinding派生一个自己的类
用IADORecordBinding接口
-----自己可以查查msdn。
当然还有其他的办法。
是按yyyy-mm-dd来表示的,你自己格式化一下不就午了
...
sg_time = pRecordset->GetCollect("sg_time");
之后
oleDate = sg_time;
之后oleDate可以直接绑到DateTimePicker控件
也可以
CString strDate;
strDate.Format("%d-%d-%d",oleDate.GetYear(),oleDate.GetMonth(),oleDate.GetDay());
sg_time = oleDate;
如果oleDate直接绑到DateTimePicker控件,不需要设值
否则可以这样
oleDate.SetYear(1999);
...
或者
oleDate.ParseDateTime("1999-10-12");
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.
};
};
如果
var.vt == VT_DATE;
那么
COleDateTime time = COleDateTime(var.date);
============================================================================
提问题时标题要简明扼要地说明问题内容,切忌使用"急","求救"之类不能说明问题的标题
http://alphasun.betajin.com/ 遇到问题可以给我发消息,给我发信息时请附带原帖地址
DocWizard C++程序文档自动生成工具 | Wave OpenGL | HttpProxy | AjaxParser词法分析
应该是可以实现的