取出来的日期型本来就可以当作字符串用吧?反正我用vb可以。而且在sql中比较时间的时候不也是用了''的吗?难道c++不能用强制类型转换?

解决方案 »

  1.   

    我是说怎么处理?
    我对那个_variant_t比较头疼
      

  2.   

    数据库中我一向用char作日期字段,这样不同数据库能通用
      

  3.   

    void CC2Dlg::OnOK() 
    {
    CoInitialize(NULL);
    try
    {
    _ConnectionPtr pConn("ADODB.Connection");
    _RecordsetPtr  pRst("ADODB.Recordset");

    pConn->Open("Provider=sqloledb;Data Source=testcomputer;"//testcomputer:computer name
    "Initial Catalog=testdb;User Id=sa;Password=;",//testdb:database name
    "", "", adConnectUnspecified);
    pRst->Open(
    "table1",
    _variant_t((IDispatch *) pConn, true),
    adOpenStatic,
    adLockReadOnly,
    adCmdTable);
    _variant_t varint = pRst->GetFields()->GetItem("intfield")->GetValue();
    _variant_t vardate=pRst->Fields->Item["datefield"]->Value;
    SYSTEMTIME systime;
    VariantTimeToSystemTime(vardate.date,&systime);
    char mybuf[1024];
    wsprintf(mybuf,"intvalue is '%d ,string date: %d/%d/%d,%d:%d:%d:%d'\n",varint.intVal,
    systime.wYear,systime.wMonth,systime.wDay,
    systime.wHour,systime.wMinute,systime.wSecond,systime.wMilliseconds);
    ::MessageBox(NULL,mybuf,"date",MB_OK);
    pRst->Close();
    pConn->Close();
    }
    catch (_com_error &e)
    {
       char buf[1024];
          wsprintf(buf,"Description = '%s'\n", (char*) e.Description());
      ::MessageBox(NULL,buf,"error",MB_OK);
    }
    ::CoUninitialize();
    }
      

  4.   

    _variant_t TheValue; 
    TheValue = m_pRecordset->GetCollect("No");              //int
    no=TheValue.iVal;
    TheValue= m_pRecordset->GetCollect("Date");             //date
    COleDateTime mydate(TheValue.date);
    TheValue = m_pRecordset->GetCollect("string");          //string
    strcpy(my,(CString)TheValue.bstrVal);
      

  5.   

    如果是Date类型
    则得到的_variant_t中_variant.vt = VT_DATE,
    对应的时间为_variant.date
    这个时间类型为微软标准的DATE类型,8bytes长
    具体定义可以看msdn
    要讲它转为string,可以用COleDateTime转,楼上的已经说了
    如果你不用mfc你可以在COleDateTime的源文件拷出几个函数来转换
      

  6.   

    SYSTEMTIME st;
    TCHAR szBuffer[MAX_PATH];
    if(vat.vt = VT_DATE)
    {
        VariantTimeToSystemTime( var.date, &st);
        sprintf(szBuffer, "%d-%d-%d %02d:%02d:%02d",
            st.wYear,
            st.wMonth,
            st.wDay,
            st.wHour,
            st.wMinute,
            st.wSecond );
    }