[gelößt] QSQLITE "Driver not loaded"

Alles rund um die Programmierung mit Qt
Antworten
Squall
Beiträge: 6
Registriert: 14. Mai 2009 20:22

[gelößt] QSQLITE "Driver not loaded"

Beitrag von Squall »

Hallo ihr,

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);
}
Und hier einmal aus meiner alten Klasse:

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!";
	}
}
Bei der alten Version hatte ich noch keine Pointer verwendet, in der neuen Version schon, damit ich NULL zuweisen und auch darauf überprüfen kann. Das macht es mir wesentlich einfacher.^^

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      += sql
Was kann ich noch machen?
Danke!

Gruß
Squall
____________________________________________________

edit: Ich habe das Problem gelöst... Irgendwie vertragen sich Datenbankverbindungen und Pointer nicht so wirklich. Ziemlich seltsam... o.O
arj
Beiträge: 45
Registriert: 1. Juni 2009 13:51
Wohnort: Ihringen

Beitrag von arj »

Code: Alles auswählen

QSqlDatabase::addDatabase("QSQLITE");
Ich würde mal vermuten, dass diese Zeile im neuen Code gefehlt hatte oder?
Antworten