2010-11-23 10 views
5

Tengo una base de datos SQLite para mi aplicación Qt. Supongo que sería lógico agregar la base de datos como recurso.Base de datos integrada en Qt

No consigo que mi aplicación compile con el recurso incrustado.

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> 

Mi base de datos SQLite en este momento es como esto

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

Edición Construido (De Qt Creator)

No rule to make target `../TimePlotter/Shipping.db3', needed by `debug/qrc_assets.cpp'. Stop. 

He intentado cambiar mi diseño de recursos, ya que a partir del mensaje que el compilador no es entrar en los datos/carpeta en la base de datos es. Consigo el mismo problema exacto de construcción con este archivo de recursos

<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

Podría por favor, puesto que su archivo .pro también? Ayudaría a entender Gracias. –

+0

Además, ¿dónde está ubicado su archivo assets.qrc en su árbol de proyectos? –

+0

agregué el archivo .pro, gracias por su ayuda –

Respuesta

8

Incluso si resuelve que la compilación problemas, la incorporación de una base de datos SQLite en el archivo QRC no va a funcionar. Ver p. la discusión en el Qt Centre Forum o en el Qt-interest mailing list. La mejor solución sería en mi humilde opinión incluir un volcado de una base de datos en el archivo qrc, crear una memoria sqlite db y reconstruir la base de datos a partir de las declaraciones SQL en el recurso.

1

que al menos saben cómo hacer esto en Mac OS X, donde funciona el parámetro QMAKE_BUNDLE_DATA. Para Windows, consulte this answer.

  1. Cree un directorio llamado "datos" en su directorio de proyectos.
  2. Ponga su archivo de base de datos allí.
  3. En el archivo .pro, agregue esta sección:

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

  4. Ahora cuando vuelva a generar su aplicación, se encuentra en la carpeta Contents/MacOS/datos. De este modo, se podría hacer algo como esto si su base de datos fue nombrado custom.db:

    db.setDatabaseName(QCoreApplication::applicationDirPath().append("/data/custom.db")); 
    
Cuestiones relacionadas