Seite 1 von 1
[Gelöst] MySql/IBase-Plugins - Fragen zur Initialisierung
Verfasst: 13. November 2014 13:00
von Fenriswolf
Hallo (hoffentlich) liebes Forum,
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
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.
Re: MySql/IBase-Plugins - Fragen zur Initialisierung
Verfasst: 13. November 2014 19:03
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.
Re: MySql/IBase-Plugins - Fragen zur Initialisierung
Verfasst: 13. November 2014 21:48
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...
Re: MySql/IBase-Plugins - Fragen zur Initialisierung
Verfasst: 13. November 2014 22:43
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.
Re: MySql/IBase-Plugins - Fragen zur Initialisierung
Verfasst: 14. November 2014 12:10
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
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
