使用 MFC C++ 6.0 从 ms 访问中读取整数数据

Read Integer data from ms access using MFC C++ 6.0

本文关键字:访问 读取 整数 数据 ms MFC C++ 使用      更新时间:2023-10-16

我有一个MS Access数据库,其中包含一个名为ANIMATEUR的表,有3列:

  1. id(整数)
  2. nom(varchar(12))
  3. 普雷诺姆(瓦尔查尔(12))

我可以读取 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();

}

这是因为

您正在尝试将 int 存储到 CString 中。首先使用 var.vt 获取正确的类型,然后相应地获取正确的值(如果这真的是一个 int,那么 vt.intVal)。当你有了 int 时,你可以把它转换成一个字符串(如果你有 C++11,则转换为 std::to_string,或者 std::atoi)。

顺便说一下,C型很丑,不安全,更喜欢C++演员表。

有关变体的更多信息,请单击此处