Eroare pentru care nu-i gasesc solutie. help, pls

Intrebari despre programarea cu VC++ incluzand mediul de dezvoltare, instalare, setari, debugger, compilator, linker si documentatie.
Post Reply
User avatar
Alex21stud
Junior
Junior
Posts: 23
Joined: 07 Jun 2009, 03:33
Judet: Dâmboviţa
Location: Targoviste
Contact:

Eroare pentru care nu-i gasesc solutie. help, pls

Post by Alex21stud » 14 Nov 2009, 13:37

Salutare tuturor!

Incerc sa fac un programel in Visual C++2005 cu baze de date in Acces. Am creat relatiile intre tabele:
tabele.jpg
tabele.jpg (60.05 KiB) Viewed 4475 times
si am urmat indicatiile din documentatia Ivor Horton's Beginning Visual C++ 2005. pagina de referinta: 980. Am ales sa fac o aplicatie MFC de tip SDI, dar inainte am creat driverul ODBC, iar la pasul: Database Support am ales Database view without file support; type: Snapshot si am selectat baza de date si tabelele necesare. (adica toate). problema este ca la compilare am o eroare:

1>AlexFACTdbView.obj : error LNK2019: unresolved external symbol "void __stdcall DDX_FieldText(class CDataExchange *,int,class ATL::CTime &,class CRecordset *)" (?DDX_FieldText@@YGXPAVCDataExchange@@HAAVCTime@ATL@@PAVCRecordset@@@Z) referenced in function "protected: virtual void __thiscall CAlexFACTdbView::DoDataExchange(class CDataExchange *)" (?DoDataExchange@CAlexFACTdbView@@MAEXPAVCDataExchange@@@Z)

iar in functia DoDataExchange(CDataExchange* pDX) am codul:

void CAlexFACTdbView::DoDataExchange(CDataExchange* pDX)
{
CRecordView::DoDataExchange(pDX);
DDX_FieldText(pDX,IDC_ID_CLIENT, m_pSet->m_ClientiID_Client, m_pSet);
DDX_FieldText(pDX,IDC_CLIENT, m_pSet->m_ClientiClient, m_pSet);
DDX_FieldText(pDX,IDC_ADRESA, m_pSet->m_ClientiAdresa, m_pSet);
DDX_FieldText(pDX,IDC_ALEGE_DATA_FACTURARE, m_pSet->m_ClientiDataFacturare, m_pSet);

DDX_FieldText(pDX,IDC_ID_NUMAR, m_pSet->m_DetaliiID_Numar, m_pSet);
DDX_FieldText(pDX,IDC_NUMAR_FACTURA, m_pSet->m_DetaliiNumarFactura, m_pSet);
DDX_FieldText(pDX,IDC_SERIE_FACTURA, m_pSet->m_DetaliiSerieFactura, m_pSet);

DDX_FieldText(pDX,IDC_CANTITATE, m_pSet->m_R_FacturaCantitate, m_pSet);

DDX_FieldText(pDX,IDC_ID_PRODUS, m_pSet->m_ProduseID_Produs, m_pSet);
DDX_FieldText(pDX,IDC_PRODUS, m_pSet->m_ProduseProduse, m_pSet);
DDX_FieldText(pDX,IDC_UM, m_pSet->m_ProduseUM, m_pSet);
DDX_FieldText(pDX,IDC_PRET_UNITAR, m_pSet->m_ProdusePretUnitar, m_pSet);
DDX_FieldText(pDX,IDC_VALOARE_PRODUS, m_pSet->m_ProduseValoareProdus, m_pSet);
DDX_FieldText(pDX,IDC_TVA, m_pSet->m_ProduseTVA, m_pSet);
DDX_FieldText(pDX,IDC_TOTAL_FACTURA, m_pSet->m_ProduseTotalFactura, m_pSet);

// you can insert DDX_Field* functions here to 'connect' your controls to the database fields, ex.
// DDX_FieldText(pDX, IDC_MYEDITBOX, m_pSet->m_szColumn1, m_pSet);
// DDX_FieldCheck(pDX, IDC_MYCHECKBOX, m_pSet->m_bColumn2, m_pSet);
// See MSDN and ODBC samples for more information
}

am cautat pe net detalii, dar nu am rezolvat. http://msdn.microsoft.com/en-us/library ... 80%29.aspx
Apelez la dvs. pt ca tot aici am mai gasit ajutor. Multumesc frumos!

Am uitat sa spun: pt manipularea datei am ales picktimecontrol...



neagu_laurentiu
Membru++
Membru++
Posts: 919
Joined: 23 Jul 2007, 11:32

Re: Eroare pentru care nu-i gasesc solutie. help, pls

Post by neagu_laurentiu » 14 Nov 2009, 16:31

Alex21stud wrote:DDX_FieldText(pDX,IDC_ALEGE_DATA_FACTURARE, m_pSet->m_ClientiDataFacturare, m_pSet);
In documentatia lui DDX_FieldText nu se pomeneste nimic de campuri CTime acolo, precum al tau.
Alex21stud wrote:am cautat pe net detalii
Mai cauta solutii prin MSDN sau in carte (noi ti le dam dar dupa ceva munca) :biggrin:

User avatar
Silviu Ardelean
Senior
Senior
Posts: 1175
Joined: 12 Jul 2007, 09:22
Judet: Timiş
Location: Timisoara
Contact:

Re: Eroare pentru care nu-i gasesc solutie. help, pls

Post by Silviu Ardelean » 14 Nov 2009, 22:47

Din baza de date iti poti pasa data intr-un obiect CString pe care il folosesti la mapare, iar pentru control datetime picker poti sa setezi data si ora la valoarea ce vine din baza de date prin acest CString.

User avatar
Ovidiu Cucu
Fondator
Fondator
Posts: 3778
Joined: 11 Jul 2007, 16:10
Judet: Iaşi
Location: Iasi
Contact:

Re: Eroare pentru care nu-i gasesc solutie. help, pls

Post by Ovidiu Cucu » 15 Nov 2009, 02:27

Singura parte din MFC care nu mi-a placut niciodata este arhitectura standard doc-view aplicata peste ODBC.

Totusi, hai s-o rezolvam.
In primul rand, eu unul m-as simti naspa daca, de exemplu, cei de la evidenta populatiei ar folosi CTime. Eu as iesi din schema pentu ca-s nascut inainte de 01.01.1970 ;)
Sa tina in aplicatie date calendaristice in CString-uri si/sau in baza de date tip CHAR/VARCHAR/TEXT si/sau s-o editeze in controale tip EDIT... iar ar fi naspa.

Solutia este:
Dupa ce a terminat Wizard-ul de scris glumitele, mai intai inlocuieste CTime cu COleDateTime in clasa derivata din CRecordset.
Exemplu:

Code: Select all

    COleDateTime m_BirthDate; // CTime was wrong!
Apoi scrie propria ta functie DDX_FieldDateTime ca sa faci schimbul cu controlul datetimepicker (retine ca functiile DDX_FieldText sunt pentru controale tip EDIT).

Code: Select all

void AFXAPI DDX_FieldDateTime(CDataExchange* pDX, int nIDC, COleDateTime& value, CRecordset* pRecordset)
{
	ASSERT_VALID(pRecordset);
	HWND hWndCtrl = pDX->PrepareCtrl(nIDC);
   CDateTimeCtrl* pCtrl = (CDateTimeCtrl*)CWnd::FromHandle(hWndCtrl);
	if(pDX->m_bSaveAndValidate)
	{
      pCtrl->GetTime(value);
	}
	else
	{
		pCtrl->SetTime(value);
	}
}
De-acuma in DoDataExchange e floare la ureche si fara dureri de cap:

Code: Select all

    DDX_FieldDateTime(pDX, IDC_DATETIMEPICKER1, m_pSet->m_BirthDate, m_pSet);

neagu_laurentiu
Membru++
Membru++
Posts: 919
Joined: 23 Jul 2007, 11:32

Re: Eroare pentru care nu-i gasesc solutie. help, pls

Post by neagu_laurentiu » 15 Nov 2009, 09:21

Ovidiu Cucu wrote:DDX_FieldDateTime(pDX, IDC_DATETIMEPICKER1, m_pSet->m_BirthDate, m_pSet);
Ovidiu, functia ta nu e nici mai buna nici mai rea fata de cea existenta in MFC, adica DDX_DateTimeCtrl.
Daca vrei sa fie cu adevarat DDX_FieldXXX atunci salveaza valoarea si in m_pSet.

viorel2005
Membru
Membru
Posts: 208
Joined: 24 May 2008, 09:41

Re: Eroare pentru care nu-i gasesc solutie. help, pls

Post by viorel2005 » 15 Nov 2009, 10:06

Oricum, functia este recomandata si de Microsoft, deoarece la adresa
http://support.microsoft.com/kb/195073
este confirmat ca functia DDX_FieldDateTimeCtrl a fost eliminata.

User avatar
Ovidiu Cucu
Fondator
Fondator
Posts: 3778
Joined: 11 Jul 2007, 16:10
Judet: Iaşi
Location: Iasi
Contact:

Re: Eroare pentru care nu-i gasesc solutie. help, pls

Post by Ovidiu Cucu » 15 Nov 2009, 11:53

neagu_laurentiu wrote:
Ovidiu Cucu wrote:DDX_FieldDateTime(pDX, IDC_DATETIMEPICKER1, m_pSet->m_BirthDate, m_pSet);
Ovidiu, functia ta nu e nici mai buna nici mai rea fata de cea existenta in MFC, adica DDX_DateTimeCtrl.
Ba chiar un pic mai proasta... Ar fi trebuit sa observ (chiar si dupa ora 1 noaptea) ca ultimul argument l-am pus degeaba. :)
Cred ca acum e clar pentru OP:
  • Pentru controlul datetimepicker folosesti DDX_DateTimeCtrl, asa cum a spus deja Laurentiu.
  • N-ar fi rau sa inlocuiesti CTime (pus de Wizard) cu COleDateTime daca nu vrei sa ai erori din cauza intervalului limitat pe care-l suporta CTime.
// Laurentiu & Viorel, mersi pentru corectura! ;)

User avatar
Alex21stud
Junior
Junior
Posts: 23
Joined: 07 Jun 2009, 03:33
Judet: Dâmboviţa
Location: Targoviste
Contact:

Re: Eroare pentru care nu-i gasesc solutie. help, pls

Post by Alex21stud » 16 Nov 2009, 18:58

Multumesc inca o data, tuturor pentru ajutor!

NU am mai intrat pe forum pentru ca rezolvasem problema cu:

DDX_DateTimeCtrl(pDX,IDC_ALEGERE_DATA, m_pSet->m_DetaliiDataFacturare);

:whorship:

Post Reply