Error C2665: 'DDX_Text' : none of the 12 overloads can convert parameter 3 from
nourryma
Messages postés8Date d'inscriptionmardi 17 mai 2005StatutMembreDernière intervention 8 juin 2005
-
6 juin 2005 à 17:22
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 2006
-
8 juin 2005 à 14:35
Bonjour,
J'essaye de faire communiquer une base de données ACCESS avec Visual C++ par l'intermédiaire d'ADO
le programme est simple:
J'ai 3 entité NOM PRENOM et BRANCHE sous forme d'IDC
Voici les lignes de codes correspondantes à mon probleme
// CTEST_ADOView construction/destruction
CTEST_ADOView::CTEST_ADOView()
: COleDBRecordView(CTEST_ADOView::IDD)
{
//{{AFX_DATA_INIT(CTEST_ADOView)
// NOTE: the ClassWizard will add member initialization here
m_pSet = NULL;
//}}AFX_DATA_INIT
// TODO: add construction code here
Je souhaiterai savoir a quoi correspond cette erreur
C:\CES\TEST_ADO\TEST_ADOView.cpp(61) : error C2665: 'DDX_Text' : none of the 12 overloads can convert parameter 3 from type 'unsigned short [26]'
C:\CES\TEST_ADO\TEST_ADOView.cpp(62) : error C2665: 'DDX_Text' : none of the 12 overloads can convert parameter 3 from type 'unsigned short [26]'
C:\CES\TEST_ADO\TEST_ADOView.cpp(63) : error C2665: 'DDX_Text' : none of the 12 overloads can convert parameter 3 from type 'unsigned short [26]'
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 6 juin 2005 à 19:18
DDX_Text a douze version, mais aucune des douze ne prend un unsigned
short[26] comme troisième paramètre. Je ne connais pas la fonction,
mais apparemment tu passes des tableaux au lieu de simples éléments
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 7 juin 2005 à 09:08
void AFXAPI DDX_Text( CDataExchange* pDX, int nIDC, BYTE& value );
void AFXAPI DDX_Text( CDataExchange* pDX, int nIDC, short& value );
void AFXAPI DDX_Text( CDataExchange* pDX, int nIDC, int& value );
void AFXAPI DDX_Text( CDataExchange* pDX, int nIDC, UINT& value );
void AFXAPI DDX_Text( CDataExchange* pDX, int nIDC, long& value );
void AFXAPI DDX_Text( CDataExchange* pDX, int nIDC, DWORD& value );
void AFXAPI DDX_Text( CDataExchange* pDX, int nIDC, CString& value );
void AFXAPI DDX_Text( CDataExchange* pDX, int nIDC, float& value );
void AFXAPI DDX_Text( CDataExchange* pDX, int nIDC, double& value );
void AFXAPI DDX_Text( CDataExchange* pDX, int nIDC, COleCurrency& value );
void AFXAPI DDX_Text( CDataExchange* pDX, int nIDC, COleDateTime& value );
=> voilà les possibilités. A mon avis c'est CString celle qui te faut. Il s'agit de toutes les fonctions de conversion possibles entre du texte (un Edit, un Static ou autre) et une variable.
Avec les MFCs il vaut mieux laisser le classwizzard s'occuper de ces choses là à moins de s'y connaître vraiment car sinon on passe un temps fou à pas comprendre pourquoi ça marche pas.
Si tu doit convertir ensuite en UNICODE (unsigned short), utilise des fonctions de conversions après la récupération du texte dans un CString.
en modifiant les definitions de m_Nom, m_Pr_nom, et m_Branche en int et non plus en wchar_t cela m'affiche des valeurs numeriques (ce qui semble à priori normal...
En utilisant ces lignes de codes a la place
void AFXAPI DDX_Text( CDataExchange* pDX,
int nIDC_NOM,
CString& m_Nom);
void AFXAPI DDX_Text( CDataExchange* pDX,
int nIDC_PRENOM,
CString& m_Prenom);
void AFXAPI DDX_Text( CDataExchange* pDX,
int nIDC_BRANCHE,
CString& m_Branche);
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 8 juin 2005 à 14:35
Tes chaines de carcactères sont déclarées en tant que wchar_t (unsigned short en fait)=> chaque caractère fera 2 octets (au lieu de 1 comme avec le type char) => c'est donc de l'UNICODE, nécessaire pour les échanges OLE/COM avec ta base de données.
Lorsque tu récupère le texte des Edits, c'est de l'ANSI (1 caractère = 1 octets). C'est pourquoi il te faut un membre intermédiaire du type CString pour gérer les Edits.
dans le .h de la classe, tu met :
CString m_strName;
dans le .cpp :
DDX_Text(pDX, IDC_NOM, m_strName);
Pour affecter à l'Edit :
m_strName = "Salut";
UpdateData(FALSE);
Pour récupérer depuis l'Edit :
UpdateData(TRUE); // => m_strName reçoit le texte de l'Edit.
Ensuite, pour communiquer avec la bdd, il faut convertir la chaîne en unicode :
wchar_t wsz[256];
MultiByteToWideChar(CP_ACP, 0, m_strName, m_strName.GetLength, wsz, 256);