2015-12-14 37 views
1

我想從SQL服務器使用CDBVariant獲取日,月,年,但我無法做到這一點我的代碼是如何從CDBVariant獲取日期?

我想要的只是cout日,月,年以我自己的格式 這樣

1990年1月3日

在我的學生表

我使用日期類型不是日期/時間,所以我想就這樣COUT在我自己的格式的日期,因爲日期我從數據庫中獲取是年月日我想要展現它作爲日 - 月 - 年

我不能能夠CDBVariant轉換:: m_pdate到CTIME

CDBVariant date; 
    rs.GetFieldValue(short(2),date);// 

    CTime a(date.m_pdate->year, date.m_pdate->month, date.m_pdate->day); 

    cout << " date is:" << a.GetYear() << endl; 
    a=NULL; //so the next value can be insert into ctime     
    rs.MoveNext(); // move to next tuple in table 
} 

我想提出的CTime一空,因此下一個值,可以插入監守的ctime顯示第一時間確定,但在此之後,它開始添加它不知道爲什麼我只想從數據庫中獲取日期和cout它。

+0

**是**什麼問題?另外考慮編輯你的問題,刪除與你的問題無關的代碼。 – IInspectable

+0

避免使用'system(「pause」)'。改用'cin.get();'。 –

+1

'a = NULL;'不會做你認爲它做的事。您需要了解對象的生命週期,並且對象不是指針。考慮從[The Definitive C++ Book Guide and List](http://stackoverflow.com/q/388242/1889329)中挑選一本或多本書。 – IInspectable

回答

1

轉換CDBVariantCOleDateTime正確的方法是:

CDBVariant var; 

if(var.m_dwType == DBVT_DATE) 
{ 
    COleDateTime timestamp(var.m_pdate->year,var.m_pdate->month,var.m_pdate->day, 
        var.m_pdate->hour,var.m_pdate->minute,var.m_pdate->second); 
    CString str = timestamp.Format(_T("%B %d, %Y")); 
} 
+0

這是行不通的。 – tjnapster555

+0

它確實有效。你應該使用'CString str = timestamp.Format(_T(「%B%d,%Y」));'得到可打印的字符串。 –

+0

問題是我從數據庫中獲取的數據沒有指向日期部分,所以我使用rs.GetFieldValue(L「date」,date,SQL_C_TIMESTAMP);''' – tjnapster555