[Gelöst] MySql/IBase-Plugins - Fragen zur Initialisierung

Alles rund um die Programmierung mit Qt
Antworten
Fenriswolf
Beiträge: 27
Registriert: 11. November 2014 18:06

[Gelöst] MySql/IBase-Plugins - Fragen zur Initialisierung

Beitrag von Fenriswolf »

Hallo (hoffentlich) liebes Forum, :D
ich bin derzeit dabei mir ein Programm zu schreiben, dass auf eine Datenbank zugreift.
Da ich noch relativ unerfahren mit deren Umgang bin, bin ich dabei herauszufinden, welche für mich am geeignetsten ist.
Derzeit versuche ich auf eine Firebird-DB zuzugreifen, und ziehe mir dazu folgen Code zur Hilfe: Get Started with QT and Embedded FireBird
Hier wird auch gesagt, dass man den Treiber erst compilieren sollte.
Da es bereits mit MySQL versucht hatte, musste ich auch den Treiber compilieren, konnte aber einfach darauf zugreifen, indem ich im Code sage

Code: Alles auswählen

QSqlDatabase::addDatabase("QMYSQL");
Dies scheint mit dem IBase-Treiber nicht zu funktionieren.
Beides sind doch Plugins in QT - Warum kann ich auf den einen ganz einfach zugreifen, den anderen muss ich erst großartig initialisieren (siehe Vorgehensweise im Link)?
Ich hoffe, das kann mir einer beantworten...

Vielen Dank schon mal für alle Antworten.
Zuletzt geändert von Fenriswolf am 14. November 2014 14:26, insgesamt 1-mal geändert.
Ich bin die Summer meiner Erfahrungen; und heute bin ich mehr, als ich gestern war
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: MySql/IBase-Plugins - Fragen zur Initialisierung

Beitrag von Christian81 »

Auch wenn Qt ein Plugin dazu anbietet sind nur einige Datenbank-Treiber vorkompiliert. Das hat meist mit Lizenzen und auch den unterschiedlichen DB-Versionen zu tun. Deshalb muss man z.B. auch den IBase-Treiber für Qt selbst bauen.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Fenriswolf
Beiträge: 27
Registriert: 11. November 2014 18:06

Re: MySql/IBase-Plugins - Fragen zur Initialisierung

Beitrag von Fenriswolf »

D.h. weil der MySQL-Treiber vorkompiliert ist, muss ich ihn nicht erst als Plugin großartig initialisieren?
Dachte ich kompiliere den Treiber, und gut ist...
Ich bin die Summer meiner Erfahrungen; und heute bin ich mehr, als ich gestern war
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: MySql/IBase-Plugins - Fragen zur Initialisierung

Beitrag von Christian81 »

Was meinst du it initialisieren? Wenn das Qt-MySQL - Plugin kompiliert ist, kann man es innerhalb von Qt so wie Du geschrieben hast, laden. Dito bei IBase.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Fenriswolf
Beiträge: 27
Registriert: 11. November 2014 18:06

Re: MySql/IBase-Plugins - Fragen zur Initialisierung

Beitrag von Fenriswolf »

Zitat von der CodeProject Seite:
Connecting to the existent database

Before setting the connection with database we should first load the QIBASE plug-in. If you decide to use the plug-in and load it manually, then the following code is for you (with assumption that plug-in is in the same folder with EXE file).

Code: Alles auswählen

 …
    if(!pluginLoader_.isLoaded())
    {
        pluginLoader_.setFileName(QApplication::instance()->applicationDirPath() +
 QDir::separator() + qtIBasePluginName_);
        
        if (!pluginLoader_.load())
        {            
            //// Loading SQL Driver failed.;
            isInitialized_ = false;
            return false;
        }
    }

    QObject* object = pluginLoader_.instance();

    if (object == NULL)
    {            
        //Loading SQL Driver Instance failed.;

        pluginLoader_.unload();
        return false;
    }

    QSqlDriverPlugin* plugin = qobject_cast<QSqlDriverPlugin*>(object);

    if (plugin == NULL)
    {            
        //QSqlDriverPlugin == NULL;
        pluginLoader_.unload();
        return false;
    }

    driver_ = plugin->create("QIBASE");

    if (driver_ == NULL)
    {            
        //Loading QIBASE Driver Instance failed.;
        pluginLoader_.unload();
        return false;
    }

    isInitialized_ = true;

    return isInitialized_;
…
Now when the plug-in for working with FireBird is loaded, we can start with the setting the connection to our database.
Leider funktioniert es bei mir nicht, indem ich einfach sage

Code: Alles auswählen

QSqlDatabase::addDatabase("QIBASE");
Mein Code zum laden der DB sieht derzeit so aus(funktioniert mit SQLite einwandfrei, nur mit IBase nicht):

Code: Alles auswählen

#include <QtSql>
#include <QMessageBox>
#include "mainwindow.hpp"

QSqlError MainWindow::initDb()
{
    db = QSqlDatabase::addDatabase("SQLITE");
    db.setDatabaseName(QDir::currentPath() + "/test.db");
    if (!QFile(db.databaseName()).exists())
    {
        QMessageBox MessageBox;
        MessageBox.setIcon(QMessageBox::Information);
        MessageBox.setWindowTitle(tr("Database not found!"));
        MessageBox.setText(tr("Database not found.\nA new Database will be created."));
        MessageBox.setStandardButtons(QMessageBox::Ok);
        MessageBox.exec();
    }

    if (!db.open())       //<-- Hier bricht er ab
        return db.lastError();

    return QSqlError();
}
muss ich für IBase noch was anderes beachten?

EDIT: Ja, man sollte auch an alle dlls denken. die "fbclient.dll" fehlte im verzeichnis :?
PS: für andere Interessierte, der erste Code, zum laden der Plugins wird nicht benötigt!

trotzdem danke, für die Hilfe :)
Ich bin die Summer meiner Erfahrungen; und heute bin ich mehr, als ich gestern war
Antworten