Встроенная база данных в Qt - PullRequest
7 голосов
/ 23 ноября 2010

У меня есть база данных SQLite для моего приложения Qt.Я предполагаю, что было бы логично добавить базу данных в качестве ресурса.

Я не могу заставить мое приложение компилироваться со встроенным ресурсом.

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>

Моя база данных sqlite сейчас выглядит следующим образом

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

Проблема сборки (из Qt Creator)

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

Я попытался изменить свой ресурсмакет, потому что это из сообщения компилятор не собирается в папку данных /, где база данных.Я получаю точно такую ​​же проблему сборки с этим файлом ресурса

<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

Ответы [ 3 ]

11 голосов
/ 25 ноября 2010

Даже если вы решите проблемы с компиляцией, встраивание базы данных sqlite в файл qrc не будет работать.Смотрите, например, обсуждение на форуме Qt Center или в списке рассылки Qt-Interest .Лучшим решением было бы IMHO включить дамп базы данных в файл qrc, создать базу данных sqlite db и перестроить базу данных из операторов SQL в ресурсе.

1 голос
/ 03 сентября 2015

Я, по крайней мере, знаю, как это сделать на Mac OSX, где работает параметр QMAKE_BUNDLE_DATA.Для Windows проверьте этот ответ .

  1. Создайте каталог с именем "data" в каталоге вашего проекта.
  2. Поместите туда файл вашей базы данных.*
  3. Добавьте в свой .pro-файл этот раздел:

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

  4. Теперь, когда вы перестроите свое приложение, оно будет находиться впапка Содержание / MacOS / данные.Таким образом, вы могли бы сделать что-то подобное, если бы ваша база данных называлась custom.db:

    db.setDatabaseName(QCoreApplication::applicationDirPath().append("/data/custom.db"));
    
1 голос
/ 25 ноября 2010

Похоже, вы удалили или переименовали свой файл базы данных Shipping.db3 и добавили ShippingData.db3.Чтобы исправить эту проблему, вы должны удалить папку сборки и пересобрать проект.Это должно решить вашу проблему сборки.

Инструкции по развертыванию базы данных вы можете прочитать здесь: http://discussion.forum.nokia.com/forum/showthread.php?202894-Add-existing-Sqlite-database-to-Qt-project

...