Чтение целочисленных данных из MS Access с использованием MFC C ++ 6.0

0

У меня есть база данных MS Access, содержащая таблицу ANIMATEUR и имеющая 3 столбца:

  1. Идентификатор (целое число)
  2. ном (VARCHAR (12))
  3. Prénom (VARCHAR (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();

}

  • 1
    Примите ответ (или напишите свой и примите этот, как только сможете), чтобы пометить вопрос как решенный !
Теги:
ms-access
mfc

1 ответ

2
Лучший ответ

Это потому, что вы пытаетесь сохранить int в CString. Сначала получите правильный тип с var.vt, а затем получите правильное значение соответственно (если это действительно int, то vt.intVal). Когда у вас есть int, вы можете преобразовать его в строку (std :: to_string, если у вас есть C++ 11 или std :: atoi).

Кстати, C cast уродливые и небезопасные, предпочитают C++ отливки.

Дополнительная информация об Варианте здесь

  • 0
    @ SaidMarar Пожалуйста, пометьте ответ как принятый, чтобы помочь людям с подобной проблемой быстро найти ответ.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню