有没办法用GetCollect(_variant_t("mytime"))把数据库中的时间直接转换为CTime的形式.
或者不用GetCollect,用其它办法.
    望指教!

解决方案 »

  1.   

    这是常用的数据库类型转换函数:
    CString CADODemoView::VariantToCtring(VARIANT var)
    {
    CString strValue;
    _variant_t var_t;
    _bstr_t bst_t;
    time_t cur_time;
    CTime time_value;
    COleCurrency var_currency;
    switch(var.vt)
    {
    case VT_EMPTY:
    strValue=_T("");
    break;
    case VT_UI1:
    strValue.Format("%d",var.bVal);
    break;
    case VT_I2:
    strValue.Format("%d",var.iVal);
    break;
    case VT_I4:
    strValue.Format("%d",var.lVal);
    break;
    case VT_R4:
    strValue.Format("%f",var.fltVal);
    break;
    case VT_R8:
    strValue.Format("%f",var.dblVal);
    break;
    case VT_CY:
    var_currency=var;
    strValue=var_currency.Format(0);
    break;
    case VT_BSTR:
    var_t=var;
    bst_t=var_t;
    strValue.Format("%s",(const char* )bst_t);
    break;
    case VT_NULL:
    strValue=_T("");
    break;
    case VT_DATE:
    cur_time=var.date;
    time_value=cur_time;
    strValue=time_value.Format("%A,%B,%d,%Y");
    break;
    case VT_BOOL:
    strValue.Format("%d",var.boolVal);
    break;
    default:
    strValue=_T("");
    break;
    }
    return strValue;}BOOL CADODemoView::ConstructVar(CString strValue, int type, VARIANT *var)
    {
    COleDateTime var_date;
    CURRENCY cy;
    cy.Hi=0;
    switch(type)
    {
    case adInteger:
    var->vt=VT_I4;
    var->lVal=atoi(strValue);
    break;
    case adCurrency:
    var->vt=VT_CY;
    cy.Lo=atoi(strValue);
    cy.int64=atoi(strValue);
    var->cyVal=cy;
    break;
    case adChar:
    case adVarWChar:
    var->vt=VT_BSTR;
    var->bstrVal=(_bstr_t)strValue;
    break;
    case adDBTimeStamp:
    var->vt=VT_DATE;
    var->date=var_date;
    break;
    default:
    var->vt=VT_EMPTY;
    break;
    }
    return TRUE;
    }
      

  2.   

    谢谢cool_ice(冷冰)
        big_welley(你快乐,所以我快乐)
        的指点.