2013-04-14 4 views
1

У меня возникла проблема с доступом к базе данных sqlite в QT. Я сохранил свою базу данных в моей папке проекта и сделать следующее:Пустая база данных sqlite в QT

.pro file 

RESOURCES += \ 

sqfiles.SOURCES = db.sqlite 
sqfiles.path = . 

DEPLOYMENT += sqfiles 

Я могу открыть свою базу данных и являюсь заявляю, что действует, но не имеет таблиц, таким образом, я не могу делать никаких команд поиска и получить следующее сообщение об ошибке после Я запускаю этот код:

QSqlQuery query("SELECT * FROM shifts", db); 
if(!query.exec()) 
{ 
    qDebug() << query.lastError().text(); 
    qDebug() << "ERROR" << endl; 
    return; 
} 
while(query.next()) 
{ 
    QString name = query.value(1).toString(); 
    qDebug() << name << endl; 
} 

сообщение: «нет запроса Невозможно получить строку»

Когда я открываю этот DB вне моего проекта QT у меня есть несколько таблиц d может запускать запросы.

Любые предложения или идеи о том, что происходит не так? Почему он думает, что моя база данных пуста?

+0

И переименуйте свой файл sqlite с расширением '.db'. –

ответ

2

Это мой запрос для создания таблицы (с использованием программы браузера SQLITE Database).

CREATE TABLE shifts (ID INTEGER PRIMARY KEY, NUMBER NUMERIC, TEXT TEXT); 
INSERT INTO shifts VALUES(1,123,'ABC'); 
INSERT INTO shifts VALUES(2,456,'DEF'); 

И это мой код Qt.

#include <QApplication> 
#include <QSqlDatabase> 
#include <QSqlQuery> 
#include <QSqlRecord> 
#include <QDebug> 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); 
    db.setDatabaseName("database.db"); 
    db.open(); 
    QSqlQuery query; 
    query.exec("SELECT * from shifts"); 
    while (query.next()) 
    { 
     qDebug() << "NUMBER" << query.value(0).toString() 
        << "TEXT" << query.value(1).toString(); 
    } 
    return a.exec(); 
} 

Выход

NUMBER "1" TEXT "123" 
NUMBER "2" TEXT "456" 

я не добавил SQLite данные в файле проекта. Скорее я использовал QSqlDatabase и добавил QT += sql. О да, убедитесь, что у вас есть драйвер SQLITE. Испытайте вот так.

qDebug() << QSqlDatabase::drivers(); 

Вот мой вывод.

("QSQLITE", "QMYSQL3", "QMYSQL") 

Todo

  • Проверьте, если у вас есть SQLite драйвер установлен с Qt
  • Проверьте файл базы данных имеет правильное имя. Используйте абсолютный путь, а не относительный путь.
+0

#include для отображения: qDebug() << QSqlDatabase :: drivers(); –

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