seit geraumer Zeit programmiere ich mit dem Qt-Framework und bin äußerst begeistert.
Ich habe für ein Projekt aus der Schule (Projektwoche) eine Datenbankprogramm erstellt, welches auf eine SQLite-Datenbank zugreift und Eingabe- wie auch Ausgabe regelt.
Doch hatte ich den ersten Code mehr oder weniger einfach nur schlecht geschrieben, sodass ich mich dazu entschied, die Klasse in gleicher Form neu zuschreiben, diesmal aber besser.^^
Es hat bis jetzt auch ganz gut funktioniert, bis ich das Programm ausführe... Eigentlich gab es keine Ausgabe, doch ich habe mal die SQL-Fehlermeldung ausgeben lassen und bekam "Driver not loaded".
Ich habe schon hier im Forum gesucht und auch in anderen, doch keine wirklich Lösung für das Problem gefunden.
Der Treiber ist vorhanden; das schließe ich daraus, dass ich die alte Version der Klasse ohne weiteres noch kompilieren und ausführen kann und weil die Datei /opt/qt/plugins/sqldrivers/libqsqlite.so vorhanden ist; und ja, ich verwende Linux. Um genau zu sein, handelt es sich hierbei um ein Archlinux-System mit installierten Paketen qt, qt-doc und qtcreator (zumindest das, was Qt angeht...).
Nun zum Code: Zum einen ist der Konstruktur als auch die Methode query interessant, in der die Fehlermeldung auch auftritt. Ausgaben wie "query1" usw.. sind lediglich Testausgaben:
Code: Alles auswählen
void vocDatabase::query(QString p_query)
{
qDebug() << "query1";
if(m_database == NULL || !m_database->open())
{
if(m_database == NULL) qDebug() << "query4";
if(!m_database->open()) qDebug() << m_database->lastError().text();
qDebug() << "query2";
m_query = NULL;
return;
}
qDebug() << "query3";
m_queryResult.clear();
m_query = new QSqlQuery(p_query);
}
vocDatabase::vocDatabase()
{
m_databaseName = new QString("./db/spa");
if(!QFile::exists(*m_databaseName))
{
qDebug() << "Database file" << m_databaseName << "not found!";
m_database = NULL;
return;
}
m_database = new QSqlDatabase();
m_database->addDatabase("QMYSQL");
m_database->setDatabaseName(*m_databaseName);
}Code: Alles auswählen
vocDatabase::vocDatabase()
{
qDebug() << "Set m_dbName";
m_dbName = "./db/spa";
// Datenbank laden
qDebug() << "Load database";
m_link = QSqlDatabase::addDatabase("QSQLITE");
m_link.setDatabaseName(m_dbName);
qDebug() << "Connect to Database" << m_dbName << "...";
if(m_link.open())
{
qDebug() << "Connected!";
qDebug() << m_link.lastError().text();
}
else
{
qDebug() << "Connection failed!";
}
}Ich dachte erst, es liegt vielleicht daran, das qtmod falsch kompiliert war, doch das habe ich ja nun wieder mit dem Archlinuxpaket "qt" ausgetauscht und eine Änderung war ja nicht bemerkbar.
Mein .pro-File meiner aktuellen Klasse sieht so aus:
Code: Alles auswählen
######################################################################
# Automatically generated by qmake (2.01a) Do. Mai 14 18:48:44 2009
######################################################################
TEMPLATE = app
TARGET =
DEPENDPATH += .
INCLUDEPATH += .
# Input
HEADERS += vocDatabase.h
SOURCES += vocDatabase.cpp
QT += sqlDanke!
Gruß
Squall
____________________________________________________
edit: Ich habe das Problem gelöst... Irgendwie vertragen sich Datenbankverbindungen und Pointer nicht so wirklich. Ziemlich seltsam... o.O