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

时间:2014-02-20 16:18:35

标签: c++ ms-access mfc

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

  1. ID(整数)
  2. NOM(VARCHAR(12))
  3. prenom(VARCHAR(12))
  4. 我可以读取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();
    

    }

1 个答案:

答案 0 :(得分:2)

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

顺便说一句C演员是丑陋而不安全的,更喜欢C++ casts

More infos on Variant here