Error C2665: 'DDX_Text' : none of the 12 overloads can convert parameter 3 from

nourryma Messages postés 8 Date d'inscription mardi 17 mai 2005 Statut Membre Dernière intervention 8 juin 2005 - 6 juin 2005 à 17:22
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Derniè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


}


CTEST_ADOView::~CTEST_ADOView()
{
}


void CTEST_ADOView::DoDataExchange(CDataExchange* pDX)
{
COleDBRecordView::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CTEST_ADOView)


//}}AFX_DATA_MAP



DDX_Text(pDX, IDC_NOM, m_pSet->m_Nom);
DDX_Text(pDX, IDC_PRENOM, m_pSet->m_Pr_nom);
DDX_Text(pDX, IDC_BRANCHE, m_pSet->m_Branche);
}

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]'

Merci d'avance.

12 réponses

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
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
0
nourryma Messages postés 8 Date d'inscription mardi 17 mai 2005 Statut Membre Dernière intervention 8 juin 2005
6 juin 2005 à 19:25
que veux tu dire par tableaux au lieu de simples elements???
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
6 juin 2005 à 19:28
Par exemple, au lieu de passer m_pSet->m_Nom, je pense que tu dois passer m_pSet->m_Nom
0
nourryma Messages postés 8 Date d'inscription mardi 17 mai 2005 Statut Membre Dernière intervention 8 juin 2005
6 juin 2005 à 19:31
Desolé mais je crois que tu as ecrit la meme chose.?..
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
6 juin 2005 à 19:33
m_pSet->m_Nom[0] pardon :)
0
nourryma Messages postés 8 Date d'inscription mardi 17 mai 2005 Statut Membre Dernière intervention 8 juin 2005
6 juin 2005 à 19:39
Le pb est toujours le meme sauf que le message d'erreur est

error C2665: 'DDX_Text' : none of the 12 overloads can convert parameter 3 from type 'unsigned short'
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
6 juin 2005 à 19:58
Tu peux essayer de caster en unsigned short

Regarde les surcharges de la méthode:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_mfc_ddx_text.asp
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
6 juin 2005 à 19:59
Caster en short je veux dire, puisque tu es deja en unsigned short
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
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.
0
nourryma Messages postés 8 Date d'inscription mardi 17 mai 2005 Statut Membre Dernière intervention 8 juin 2005
7 juin 2005 à 11:41
Je ne comprend pas vraiment ce que vous voulez dire (je suis débutant en C++...)

J'utilise le livre de Ivor Horton's sur C++

J'essaye d'utiliser sa methode avec ce type de code

DDX_Text(pDX, IDC_NOM, m_pSet->m_Nom);
DDX_Text(pDX, IDC_PRENOM, m_pSet->m_Pr_nom);
DDX_Text(pDX, IDC_BRANCHE, m_pSet->m_Branche);

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);

rien ne s'affiche dans mes Edit Box.
0
nourryma Messages postés 8 Date d'inscription mardi 17 mai 2005 Statut Membre Dernière intervention 8 juin 2005
8 juin 2005 à 14:24
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.

qu'est ce que cela veut dire????
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
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);
0
Rejoignez-nous