Seite 1 von 1

Verbindung mit Firebird embedded schlägt fehlt

Verfasst: 18. November 2009 14:57
von guenni81
Hallo,
ich versuche grade das masterdetail Beispiel das Ursprünglich auf eine SQLite DB zugegriffen hat so zu ändern damit dies mit einer Firebird embedded DB läuft. Das QIBASE SQL Modul hab ich mir problemlos kompilieren können. Dieses ist auch mit einem Aufruf von

Code: Alles auswählen

db.drivers();
verfügbar. Siehe hier!
("QIBASE", "QSQLITE", "QSQLITE2", "QPSQL7", "QPSQL")
Wenn ich nun versuche mich mit der DB zu verbinden bekomme ich nur folgende Fehlermeldung:
"Unable to complete network request to host "localhost". - Failed to establish a connection. - Connection refused Error opening database"
Der Code zum verbinden ist der folgende:

Code: Alles auswählen

QSqlDatabase db = QSqlDatabase::addDatabase("QIBASE");
db.setDatabaseName("/path/to/file/test.fdb");
//db.setUserName("SYSDBA");
//db.setPassword("masterkey");
Hat eventuell jemand nen Tipp was ich an dieser Stelle falsch mache?

Verfasst: 19. November 2009 16:15
von guenni81
Wirklich niemand ne Idee?

Verfasst: 20. November 2009 08:34
von spatro
Mir fällt dazu momentan nichts ein, aber bist du dir sicher, dass du alle nötigen Dateien in das Verzeichnis kopiert und umbenannt hast (So wie es in der Anleitung von firebird embedded erklärt ist.)

Verfasst: 20. November 2009 10:02
von guenni81
spatro hat geschrieben:Mir fällt dazu momentan nichts ein, aber bist du dir sicher, dass du alle nötigen Dateien in das Verzeichnis kopiert und umbenannt hast (So wie es in der Anleitung von firebird embedded erklärt ist.)
Ich hab mitlehrweile alle möglichen Anleitungen ausprobiert, deshalb wäre mal die Frage welche du hier meinst? Vielleicht hab ich ja nur was übersehen.

Verfasst: 20. November 2009 10:14
von guenni81
Ich sollte vielleicht noch dazu sagen das ich Linux Ubuntu 9.04 nutze und dort die Probleme auftreten.

Verfasst: 20. November 2009 10:47
von guenni81
OK, ich hab die Lösung gefunden. Das Problem bei Linux ist das ein Symlink (/usr/lib/libgds.so) zum korrekten kompilieren des Plugins erstellt werden muß. Dieser Symlink hat bei mir auf die Datei /usr/lib/libfbclient.so gezeigt, was natürlich in meinem Fall einfach nur falsch ist. Mein Symlink muß korrekterweise auf die Datei /usr/lib/libfbembed.so verweisen. Grund hierfür ist das die Datei /usr/lib/libfbclient.so für den Verbindungsaufbau zu einem laufenden Server verantwortlich ist und die Datei /usr/lib/libfbembed.so für die Embedded Datenbank.
Nach dem umlinken und neu kompilieren des QIBASE Plugins funktioniert dies auch endlich so wie es soll.

Code: Alles auswählen

#include <QtCore/QCoreApplication>
#include <QtSql>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    // ermittle vorhandene Treiber
    QStringList drivers = QSqlDatabase::drivers();

    qDebug() << "Vorhandene Treiber:";
    qDebug() << "===================";
    foreach(QString driver, drivers) {
        qDebug() << driver;
    }
    qDebug() << "===================";

    QSqlDatabase db = QSqlDatabase::addDatabase("QIBASE");
    db.setDatabaseName("/path/to/file/employee.fdb");
    if(!db.open()) {
        qDebug() << db.lastError().text();
        return false;
    }

    QSqlQuery q;
    q.exec("SELECT * FROM EMPLOYEE");

    qDebug() << "Ausgabe:";
    qDebug() << "=======================================================";
    while(q.next()) {
        qDebug() << q.value(0).toString() << "|" << q.value(1).toString() << "|" << q.value(2).toString();
    }
    qDebug() << "=======================================================";

    db.close();

    return true;
}