Avatar billede garlan Nybegynder
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++
Avatar billede jpk Nybegynder
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.
Avatar billede garlan Nybegynder
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.
Avatar billede jpk Nybegynder
03. december 2003 - 14:19 #3
Hvilken type objekt bruger du til at repræsentere et recordset?
Avatar billede garlan Nybegynder
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....!
Avatar billede jpk Nybegynder
03. december 2003 - 14:46 #5
Hvad dækker CTest over?
Hvordan hiver du data ud af et recordset?
Avatar billede garlan Nybegynder
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));
    }
};
Avatar billede jpk Nybegynder
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.
};
Avatar billede garlan Nybegynder
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;
};
Avatar billede jpk Nybegynder
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);
Avatar billede garlan Nybegynder
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!
Avatar billede garlan Nybegynder
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.
Avatar billede jpk Nybegynder
03. december 2003 - 16:09 #12
Jep, jeg huskede forkert...
Du skal bruge Format metoden
Avatar billede garlan Nybegynder
04. december 2003 - 08:18 #13
Takker :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester