我有一个MS Access数据库,其中包含一个名为ANIMATEUR的表,有3列:
我可以读取varchar列的数据但我的问题是当我尝试读取整数列时 - 我收到错误...我认为问题是由整数转换为CString引起的。
这是我的代码:
void gestionAnimateur::refreshList(){
m_liste.DeleteAllItems();
COleVariant var;
CString nom,prenom,id;
database.Open(cheminDB);
record.Open(AFX_DAO_USE_DEFAULT_TYPE,"SELECT * FROM ANIMATEUR",NULL);
int i = 0;
while(! record.IsEOF()){
record.GetFieldValue("id",var);
id= (LPCSTR) var.pbstrVal;
m_liste.InsertItem(i,id,0);
record.GetFieldValue("prenom",var);
prenom = (LPCSTR) var.pbstrVal;
m_liste.SetItemText(i,1,prenom);
record.GetFieldValue("nom",var);
nom = (LPCSTR) var.pbstrVal;
m_liste.SetItemText(i,2,nom);
i++;
record.MoveNext();
}
database.Close();
record.Close();
}
这里的解决方案是代码ETDITED:
void gestionAnimateur::refreshList(){
m_liste.DeleteAllItems();
COleVariant var;
CString nom,prenom,idStr;
int idInt;
char idChar[12];
database.Open(cheminDB);
record.Open(AFX_DAO_USE_DEFAULT_TYPE,"SELECT * FROM ANIMATEUR",NULL);
int i = 0;
while(! record.IsEOF()){
record.GetFieldValue("id",var);
idInt = var.intVal;
itoa(idInt,idChar,10);
idStr=idChar;
m_liste.InsertItem(i,idStr,0);
record.GetFieldValue("prenom",var);
prenom = (LPCSTR) var.pbstrVal;
m_liste.SetItemText(i,1,prenom);
record.GetFieldValue("nom",var);
nom = (LPCSTR) var.pbstrVal;
m_liste.SetItemText(i,2,nom);
i++;
record.MoveNext();
}
database.Close();
record.Close();
}
答案 0 :(得分:2)
这是因为你试图将int存储到CString中。 首先使用var.vt获取正确的类型,然后相应地获取正确的值(如果这实际上是int,那么vt.intVal)。 如果你有int,那么你可以把它转换成一个字符串(std::to_string,如果你有C ++ 11或std::atoi)。
顺便说一句C演员是丑陋而不安全的,更喜欢C++ casts。