2015-11-02 2 views
0

Мой QT SQL SELECT не возвращает данные:QT SQLite не выбран возвращает никаких данных

//connect DB 
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); 
db.setDatabaseName("C:/temp/atsakymai_1.db"); 
if (!db.open()) 
{ 
    qDebug() << "Connection error!!!"; 
} 
QSqlQuery query; 
query.prepare("SELECT * FROM transportas"); 
if (!query.exec()) 
{ 
    qDebug() << "SQL error: "<< query.lastError().text() << endl; 
} 

qDebug() << query.executedQuery(); 
qDebug() << query.result(); 
qDebug() << query.size(); 

query.first(); 
while (query.next()) 
{ 
    qDebug() << "found " << endl; 
} 

судимое написать этот путь - C: \ Temp \ atsakymai_1.db, но результат тот же: qurey .result - 0x3c6ed8 query.size - -1

У меня был весь день в google, но это не помогло, но до сих пор не знаю, что не так с моим кодом.

судимых ВСТАВИТЬ Перед SELECT, INSERT работает без ошибок, но не помечать возвращает ничего:

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); 
db.setDatabaseName("C:/temp/atsakymai_1.db"); 

if (!db.open()) 
{ 
    qDebug() << "error!!!"; 
} 

QSqlQuery query(db); 

query.exec("insert into t_transportas (transportas) values ('asdasd22')"); 
query.exec("SELECT id, transportas FROM 't_transportas'"); 

qDebug() << query.executedQuery(); 
qDebug() << query.result(); 
qDebug() << query.size(); 
if (query.size()> 0) 
{ 
    qDebug() << "found " << 
} 
+1

QT является QuickTime, Qt является основой ... вам необходимо подготовить запрос делать то, что происходит, если вы просто попробовать: 'QSqlQuery запрос («SELECT * FROM transportas;»); bool success = query.exec(); while (query.next() == true) { qDebug() << query.value (0) .toString(); } ' –

+0

@Alchazar Вы можете подтвердить, что db.open() работает нормально? Возвращает ли query.exec() true? У вас есть приложение типа SQLite explorer, которое может подключиться к этому файлу, чтобы проверить наличие в нем данных? Мне нравится использовать «select count (*) из mytable», поскольку он всегда возвращает одну строку, если таблица присутствует в базе данных. –

+0

@TheBadger попробовал ваш код, результат тот же - ничего не получалось. – Alchazar

ответ

2

Найден, где проблема, функция QSqlQuery :: размера() не работает, он всегда возвращает -1. Поэтому не используйте эту функцию, чтобы найти количество строк. Вместо этого используйте функции .first() .next(). Этот код работает правильно:

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); 
db.setDatabaseName("C:/temp/atsakymai_1.db"); 
if (!db.open()) 
{ 
    qDebug() << "error!!!"; 
} 

QSqlQuery query(db); 
query.prepare("SELECT id, transportas FROM 't_transportas'"); 
if (!query.exec()) 
{ 
    qDebug() << "SQL error: "<< query.lastError().text() << endl; 
} 
    query.first(); 
    qDebug() << "found: " << endl; 
    while (query.next()) 
    { 

     qDebug() << query.value("id").toString() << ". " << query.value("transportas").toString(); 

    } 

Asnwer здесь: QtSQL + Sqlite and support for .size() function?

+0

Молодцы. Хорошо. –

Смежные вопросы