Verbindung mit Firebird embedded schlägt fehlt

Alles rund um die Programmierung mit Qt
Antworten
guenni81
Beiträge: 134
Registriert: 29. Juli 2006 02:22

Verbindung mit Firebird embedded schlägt fehlt

Beitrag 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?
mfg
Günni
guenni81
Beiträge: 134
Registriert: 29. Juli 2006 02:22

Beitrag von guenni81 »

Wirklich niemand ne Idee?
mfg
Günni
spatro
Beiträge: 46
Registriert: 18. Juni 2008 10:54

Beitrag 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.)
guenni81
Beiträge: 134
Registriert: 29. Juli 2006 02:22

Beitrag 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.
mfg
Günni
guenni81
Beiträge: 134
Registriert: 29. Juli 2006 02:22

Beitrag von guenni81 »

Ich sollte vielleicht noch dazu sagen das ich Linux Ubuntu 9.04 nutze und dort die Probleme auftreten.
mfg
Günni
guenni81
Beiträge: 134
Registriert: 29. Juli 2006 02:22

Beitrag 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;
}
mfg
Günni
Antworten