[gelöst] Sqlite DB in Resourcen Datei wird nicht geöffnet.

Alles rund um die Programmierung mit Qt
Antworten
brr
Beiträge: 4
Registriert: 15. September 2010 17:13

[gelöst] Sqlite DB in Resourcen Datei wird nicht geöffnet.

Beitrag von brr »

Hallo,

ich will eine Sqlite Datenbank in meinem Programm verwenden. Diese will ich mittels des Qt Resource Systems einbinden. Beim öffnen erhalte ich allerdings die Meldung: "unable to open database file Error opening database"



Hier ein Minimalbeispiel:

resource_minExample.pro

Code: Alles auswählen

# -------------------------------------------------
# Project created by QtCreator 2011-03-14T23:07:50
# -------------------------------------------------
QT += sql
QT -= gui
TARGET = resource_minExample
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp
RESOURCES += res.qrc
main.cpp

Code: Alles auswählen

#include <QtCore/QCoreApplication>
#include <QSqlDatabase>
#include <QDebug>
#include <QSqlError>
#include <QFile>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName(":/db.sqlite");
    QFile dbFile(":/db.sqlite");
    if (!dbFile.exists())
        qDebug() << "Datei nicht gefunden";
    else
    {
        db.setDatabaseName(":/db.sqlite");
        qDebug() << "Datei wurde gefunden";
    }
    if(!db.open())
        qDebug() << db.lastError().text();
    else qDebug() << "Datenbank konnte geöffnet werden";

    db.setDatabaseName("./db.sqlite");
    if(!db.open())
        qDebug() << db.lastError().text();
    else qDebug() << "Datenbank konnte geöffnet werden";

    return a.exec();
}
Ich kriege den Output:
Starte resource_minExample...
Datei wurde gefunden
"unable to open database file Error opening database"
Datenbank konnte geöffnet werden
res.qrc

Code: Alles auswählen

<!DOCTYPE RCC><RCC version="1.0">
    <qresource>
        <file>db.sqlite</file>
    </qresource>
</RCC>
Mit Verwendung eines alias genau das gleiche:

Code: Alles auswählen

<!DOCTYPE RCC><RCC version="1.0">
    <qresource>
        <file alias = "dbalias.sqlite">db.sqlite</file>
    </qresource>
</RCC>

Code: Alles auswählen

[...]
db.setDatabaseName(":/dbalias.sqlite");
[...]
Gleicher Output in dieser Variante.

Inhalt des Verzeichnisses:

Code: Alles auswählen

-rw-r--r-- 1 x x   8192 2011-03-14 22:29 db.sqlite
-rw-r--r-- 1 x x    519 2011-03-14 23:25 main.cpp
-rw-r--r-- 1 x x    299 2011-03-14 23:09 resource_minExample.pro
-rw-r--r-- 1 x x    105 2011-03-14 23:30 res.qrc
Warum funktioniert das so nicht?
Danke im Voraus.
Zuletzt geändert von brr am 15. März 2011 16:04, insgesamt 1-mal geändert.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Das geht nicht. Zumal die Resourcen read-only sind.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
brr
Beiträge: 4
Registriert: 15. September 2010 17:13

Beitrag von brr »

Dann ist mein Problem wohl gelöst (:
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag von RHBaum »

Wobei mittel und wege gibt es immer.

Ne Ressource iss nen einkompilierter datenstrom.
Du bekommst ihn auch nur als Datenstrom.

Was du nun brauchst, ist ein Tool welches dir eine datenbank in einen Datenstrom/Liste aus Anweisungen "wegdumpt" und ein Befehl, welches so einen Dump als Stream wieder in eine DB einliest auf API-Ebene.
Denk was brauchbares dafuer hat sqlite.

Dann nimmst ne datenbank, dumpst die weg.
den dump fuegst als ressource deinem Prog hinzu.
in deinem programm erzeugst nen neues SQlite Object, erzeugst nen readonly Stream deiner Gedumpten Daten, fuetterst das SQLite Object mit dem Stream.
Voiala hasst du ne DB mit aus dem Datensegment deines Progs befuellten Werten !

Was aber definitiv nicht geht, ist dass die DB bearbeiten laesst und die aenderungen im Datensegment deines Progs abspeichern lassen willst ! ne exe die sich selber modifiziert ! Da hat das BS glaub ich was dagegen !

Ciao ...
Antworten