2015-05-07 4 views
1

В моем приложении GUI я хочу заполнить QTableWidget значениями из базы данных Oracle. Я знаю, что это проще сделать, используя QTableView и QSqlQueryModel. Но я хочу получить доступ к данным позже по позиции, поэтому я хочу использовать QTableWidget.Заполнение QTableWidget значениями базы данных

Я успешно установил связь с моей БД Oracle и фрагмент кода для заполнения данных является -

QSqlQuery myquery("select SL_NO, NAME, AGE from EMPLOYEE"); 

ui->tableWidget->setColumnCount(myquery.record().count()); 
ui->tableWidget->setRowCount(myquery.size()); 

int index = 0; 
while(myquery.next()) 
{ 
    ui->tableWidget->setItem(index,0,new QTableWidgetItem(myquery.value(0).toString())); 
    ui->tableWidget->setItem(index,1,new QTableWidgetItem(myquery.value(1).toString())); 
    ui->tableWidget->setItem(index,2,new QTableWidgetItem(myquery.value(2).toString())); 
    index ++; 
} 

Выход -

enter image description here

Что случилось с моим кодом ??? что мне не хватает ???

ответ

1

Единственная причина, я вижу для этого эффекта является то, что myquery.size() в

ui-> tableWidget-> setRowCount (myquery.size());

0 и myquery.next() всегда возвращает false.

Если myquery.size() были> 0, а myquery.value (0) .toString() вернет пустые строки, вы все равно увидите пустые строки.

Поэтому я сомневаюсь, что ваш запрос возвращает то, что вы надеетесь, что оно вернется. Используйте некоторые qDebugs для проверки данных, которые вы получаете из своей базы данных.

+0

ну, запрос выполняется нормально, ошибок нет (db.lasterror) – RicoRicochet

+0

Я устанавливаю if else control на query.exec(), чтобы увидеть ошибку, но он пришел к сообщению о успешном qDebug, т.е. приходите к предложению else, содержащему db.lasterror – RicoRicochet

+0

Это не означает, что вы получаете значения. Когда соединение с базой данных в порядке, вы получаете пустой результат. Ничего в EMPLOYEE? – Greenflow