solarix hat geschrieben:Ausserdem:
Code: Alles auswählen
QString dbFile ( QDir::currentPath() +"/../libQObject.dll" );
if ( QFile::exists ( dbFile ) )
{
db = QSqlDatabase::addDatabase ( "QSQLITE" );
db.setDatabaseName ( dbFile );
Ich habe noch nie mit QSQLITE gearbeitet, aber stimmt das so (mit der DLL als Angabe in "setDatabaseName()")?
Ja sicher, es ist prinzipiell egal welche Namen die hat. Sinn dahinter ist, dass man unter Windows die Datenbank nicht sofort als solche erkennen kann. Mit dem Namen kann man sie nicht unbedingt von den anderen Qt-Bibliotheken unterscheiden.
Christian81 hat geschrieben:Hau endlich deine Klassenvariable weg, nimm einen Namen und fertig!
Okay, ich hab die Uebergabe aus dem Konstruktor entfernt, die Member-Variable und und und. Die anderen Klassen, die auf die Datenbank zugreifen sind auskommentiert. Es wird also eine Verbindung zur Datenbank aufgebaut und dannach der Konstruktor der MainPage aufgerufen, der nun nur den parent enthaellt. Das einzige Vorkommen von Datenbanken ist jetzt die eine Methode getImage(int):
Code: Alles auswählen
QImage MainPage::getImage ( int id )
{
qDebug() << id;
QSqlQuery query ( QSqlDatabase::database() );
query.prepare ( "SELECT data FROM splashes WHERE id = :id" );
query.bindValue ( ":id", id+1 );
qDebug() << query.exec() << " " << query.next() << " " << query.executedQuery() << " " << query.lastError();
QByteArray array = query.value ( 0 ).toByteArray();
QBuffer buffer ( &array );
buffer.open ( QIODevice::ReadOnly );
QImageReader reader ( &buffer, "JPG" );
QImage image = reader.read();
return image;
}
Das funktioniert schonmal nicht. Ich finde es sehr verwirrend, dass exec ein true zurueckliefert, next aber ein false.
Executes the SQL in query. Returns true and sets the query state to active if the query was successful; otherwise returns false.
Also stimmt das Query. Wenn ich exakt das gleiche Query per Hand an die Datenbank uebergebe, kommen wie erwartet Binaerzeichen raus.
Also geben wir dem Kind einen Namen. addDatabase() hat den Parameter "MainDB" bekommen, ebenso wie QSqlDatabase::database(). Wieder der gleiche Fehler.
Also den Konstruktor in
Code: Alles auswählen
MainPage::MainPage ( QSqlDatabase db_conn, QWidget *parent )
geaendert und per
das ganze (hoffentlich) in die Member-Variable gepackt. Keine Aenderung.
Naechster Versuch: ohne ueberhabe mit = sondern stattdessen
Code: Alles auswählen
MainPage::MainPage ( QSqlDatabase db_conn, QWidget *parent )
: QWidget ( parent ) , db ( db_conn )
und wie immer im log:
0
true false "SELECT data FROM splashes WHERE id = ?" QSqlError(-1, "", "")
QSqlQuery::value: not positioned on a valid record
QPixmap::scaled: Pixmap is a null pixmap