2010-11-23 6 views
5

J'ai une base de données SQLite pour mon application Qt. Je suppose qu'il serait logique d'ajouter la base de données comme une ressource.Base de données intégrée dans Qt

Je ne parviens pas à compiler mon application avec la ressource intégrée.

connection.h

#ifndef CONNECTION_H 
#define CONNECTION_H 

#include <QMessageBox> 
#include <QSqlDatabase> 
#include <QSqlError> 
#include <QSqlQuery> 

static bool createConnection() 
{ 
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); 
    db.setDatabaseName(":/data/ShippingData.db3"); 
    if (!db.open()) 
    { 
     QMessageBox::critical(0, QObject::tr("Database Error"), db.lastError().text()); 
     return false; 
    } 
    return true; 
} 

#endif // CONNECTION_H 

assets.qrc

<RCC> 
    <qresource prefix="/data"> 
     <file>ShippingData.db3</file> 
    </qresource> 
</RCC> 

Ma base de données SQLite est en ce moment comme celui-ci

app.pro 
    file.h 
    file.cpp 
    data/ShippingData.db3 

Construire Edition (De Qt Creator)J'ai essayé de modifier la disposition de ma ressource parce que le message du compilateur ne va pas dans le dossier/données dans lequel se trouve la base de données. Je reçois la question exacte même génération avec ce fichier de ressources

<RCC> 
    <qresource> 
     <file>data/ShippingData.db3</file> 
    </qresource> 
</RCC> 

TimePlotter.pro

#------------------------------------------------- 
# 
# Project created by QtCreator 2010-11-21T03:18:17 
# 
#------------------------------------------------- 

QT  += core gui 

TARGET = TimePlotter 
TEMPLATE = app 


SOURCES += main.cpp\ 
     mainwindow.cpp \ 
    time.cpp \ 
    clients.cpp \ 
    printTime.cpp 

HEADERS += mainwindow.h \ 
    time.h \ 
    clients.h \ 
    printTime.h \ 
    connection.h 

FORMS += mainwindow.ui \ 
    time.ui \ 
    clients.ui \ 
    printTime.ui 

RESOURCES += \ 
    assets.qrc 
+0

Pourriez-vous s'il vous plaît également publier votre fichier .pro? Cela aiderait à comprendre. Merci. –

+0

En outre, où se trouve votre fichier assets.qrc dans votre arborescence de projet? –

+0

J'ai ajouté le fichier .pro, merci pour l'aide –

Répondre

8

Même si vous vous résoudre les problèmes de compilation, l'intégration d'une base de données SQLite dans le fichier qrc ne fonctionnera pas. Voir par exemple la discussion dans le Qt Centre Forum ou sur le Qt-interest mailing list. La meilleure solution serait IMHO pour inclure un vidage d'une base de données dans le fichier qrc, créer une mémoire sqlite db et reconstruire la base de données à partir des instructions SQL dans la ressource.

1

je au moins savoir comment faire sur Mac OSX, où le paramètre QMAKE_BUNDLE_DATA fonctionne. Pour Windows, consultez this answer.

  1. Créez un répertoire appelé "données" dans le répertoire de votre projet.
  2. Mettez votre fichier de base de données là-dedans.
  3. Dans votre fichier .pro, ajoutez cette section:

    mac { Resources.files = data Resources.path = Contents/MacOS QMAKE_BUNDLE_DATA += Resources }

  4. Maintenant, lorsque vous reconstruisez votre application, il sera situé dans le contenu/MacOS/dossier de données. Ainsi, vous pourriez faire quelque chose comme ça si votre base de données a été nommé custom.db:

    db.setDatabaseName(QCoreApplication::applicationDirPath().append("/data/custom.db")); 
    
Questions connexes