03. december 2003 - 13:30
Der er
12 kommentarer og 1 løsning
DBTIMESTAMP til CString eller CTime
Hej Jeg returner data fra en MSSQL á type datetime til et mfc program. I recordset beskrives dataene der returneres af type DBTIMESTAMP Mit problem er hvordan laver jeg datetime/DBTIMESTAMP om til CTime eller CString i C++
Annonceindlæg fra Novataris
03. december 2003 - 13:43
#1
I din DoFieldExchange kan du bruge RFX_Date til at mappe til en COleDateTime, den har en ParseDateTime metode der kan formatere datoen til en CString.
03. december 2003 - 14:09
#2
Hvor finder jeg DoFieldExchange! jeg bruger ole db til at kommunikerer med SQL'en. Kan du ikke vise et lille kode eks.
03. december 2003 - 14:19
#3
Hvilken type objekt bruger du til at repræsentere et recordset?
03. december 2003 - 14:41
#4
Jeg ved ikke hvad du mener med objekt. jeg laver følgende i Document filen i MFC programmet: eks. erklærer CTest m_Test; og så i cpp filen hvor dataene skal brugers! CTest* pT =&GetDocument()->m_Test; if(pT->Open() == S_OK) o.s.v....!
03. december 2003 - 14:46
#5
Hvad dækker CTest over? Hvordan hiver du data ud af et recordset?
03. december 2003 - 15:01
#6
Er ikke sikker! men CTest er en klasse i recordset'et som jeg erklærer i document filen. public: CTest m_Test; for at hive data ud, laver jeg en pointer (pT) CTest* pT =&GetDocument()->m_Test; //Pointer til recordset if(pT->Open() == S_OK) //åbner forbindelsen til sql while(pT->MoveNext() == S_OK)//returner alle kolonner en efter en! pT->m_Data; //data her er et lille udsnit af det første i mit recordset! // GobaleStatus.H : Declaration of the CGobaleStatus class #ifndef __GOBALESTATUS_H_ #define __GOBALESTATUS_H_ class CGobaleStatusAccessor { public: LONG m_Id; DBTIMESTAMP m_StartDato; DBTIMESTAMP m_SlutDato; TCHAR m_GobalStatus[51]; BEGIN_COLUMN_MAP(CGobaleStatusAccessor) COLUMN_ENTRY(1, m_Id) COLUMN_ENTRY(2, m_StartDato) COLUMN_ENTRY(3, m_SlutDato) COLUMN_ENTRY(4, m_GobalStatus) END_COLUMN_MAP() // You may wish to call this function if you are inserting a record and wish to // initialize all the fields, if you are not going to explicitly set all of them. void ClearRecord() { memset(this, 0, sizeof(*this)); } };
03. december 2003 - 15:05
#7
Jamen der må da være en definition på CTest et eller andet sted!!! ala: class CTest : public whatever { // metoder mm. };
03. december 2003 - 15:09
#8
noget ligne det her? class CGobaleStatus : public CTable<CAccessor<CGobaleStatusAccessor> > { public: HRESULT Open() { HRESULT hr; hr = OpenDataSource(); if (FAILED(hr)) return hr; return OpenRowset(); } HRESULT OpenDataSource() { HRESULT hr; CDataSource db; CDBPropSet dbinit(DBPROPSET_DBINIT); dbinit.AddProperty(DBPROP_AUTH_PASSWORD, OLESTR("eMesUssiM")); dbinit.AddProperty(DBPROP_AUTH_PERSIST_SENSITIVE_AUTHINFO, false); dbinit.AddProperty(DBPROP_AUTH_USERID, OLESTR("MissUseMe")); dbinit.AddProperty(DBPROP_INIT_CATALOG, OLESTR("SKP-DataBase")); dbinit.AddProperty(DBPROP_INIT_DATASOURCE, OLESTR("DC2")); dbinit.AddProperty(DBPROP_INIT_LCID, (long)1030); dbinit.AddProperty(DBPROP_INIT_PROMPT, (short)4); hr = db.Open(_T("SQLOLEDB.1"), &dbinit); if (FAILED(hr)) return hr; return m_GobaleStatus.Open(db); } HRESULT OpenRowset() { return CTable<CAccessor<CGobaleStatusAccessor> >::Open(m_GobaleStatus, _T("dbo.GobaleStatus")); } CSession m_GobaleStatus; };
03. december 2003 - 15:21
#9
COleDateTime d(m_StartDato.year, m_StartDato.month, m_StartDato.day, m_StartDato.hour, m_StartDato.minute, m_StartDato.second); CString strDate; d.ParseDateTime(strDate);
03. december 2003 - 15:52
#10
Det giver ingen fejl når jeg builder programmet, men det virker ikke! Der står ikke noget i strengen!
03. december 2003 - 16:00
#11
jeg fandt lige noget om ParseDateTime() i hjælpen til Visual ParseDateTime Reads a date/time value from a string and sets the value of COleDateTime.
03. december 2003 - 16:09
#12
Jep, jeg huskede forkert... Du skal bruge Format metoden
04. december 2003 - 08:18
#13
Takker :-)
Kurser inden for grundlæggende programmering