qt sqlite выберите заявление - PullRequest
1 голос
/ 06 июля 2011

Я решил протестировать sqlite db для своего приложения Qt.

Я создал файл sqlite db с правильными инструкциями (создать таблицу и т. Д. И вставил несколько строк данных).Моя проблема в том, что когда я выполняю оператор выбора, я не получаю никаких записей.

Это код, который я использую:

qq.sprintf("SELECT * from descriptors WHERE descriptors.id=%d ",idx);
query.exec(qq);
if( query.isSelect() ){
    while (query.next()){

    int fff = query.value(0).toInt();

}}

Проблемав том, что я никогда не попаду внутрь цикла while.query.next (), кажется, не работает.

какие-либо подсказки?заранее спасибо, Thodoris

ps я забыл написать свою конфигурацию так: Qt 4.7.3, windows 7, visual studio 2008

Ответы [ 2 ]

2 голосов
/ 06 июля 2011

За исключением опубликованной ошибки hexa, query.isSelect() всегда будет возвращать true, даже если запрос не выполнен.Вам нужно проверить результат exec():

QSqlQuery query;
query.prepare( "SELECT * FROM descriptors WHERE id = ?" );
query.bindValue( 0, idx ); // assuming idx is an integer/long/QVariant value

if( !query.exec() )
{
  // Error Handling, check query.lastError(), probably return
}

// Note: if you don't return in case of an error, put this into the else{} part
while( query.next() )
{
    int fff = query.value( 0 ).toInt();
}
0 голосов
/ 12 июня 2013

В моем случае сработала обратная итерация над QSqlQueries. Я думаю, что это может быть ошибка где-то в реализации драйвера QSQLite.

QSqlQuery q = db.exec("SELECT * FROM Table");
if (q.last()) {
    do {
        // Do something with row...
    } while (q.previous());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...