Moin moin!
Ich würde gerne in einem Programm von mir, geschrieben in QT 3.x welches mySQL als Datenbank nutzt, Bilder in der Datenbank abspeichern. Und zwar möchte ich jetzt nicht den Pfad abspeichern, sondern wirklich die Bilder. Ich weiß, ich könnte ein Verzeichnis anlegen und alle Bilder automatisch dorthin kopieren und dann als Verweis in der Datenbank ablegen. Ich hätte sie aber gerne fest in der Datenbank integriert, was einem Backup oder verschieben der Datenbank entgegen kommen würde.
Irgendwer eine Idee wie ich das in Qt 3.x realisiere?
mfg
Tobias
Bilder in mySQL Datenbank einbinden?
-
BartSimpson
- Beiträge: 1379
- Registriert: 6. November 2004 12:03
- Kontaktdaten:
-
BartSimpson
- Beiträge: 1379
- Registriert: 6. November 2004 12:03
- Kontaktdaten:
Code: Alles auswählen
QSqlQuery Abfrage;
QImage Bild;
QByteArray Datenfeld;
QBuffer Puffer(&Datenfeld);
Puffer.open(QIODevice::WriteOnly);
Bild.save(&Puffer, "PNG");
Abfrage.prepare("INSERT INTO Bilder (Bild) VALUES (?)");
Abfrage.bindValue(0,Bild);
Abfrage.exec();
ich hab hier mal das ganze fertig fuer eine SQLite-Datenbank geschrieben:filenames ist einfach eine QStringList, das data-feld ist BLOB. Das Ding kann natuerlich nicht nur fuer Bilder verwendet werden, sondern im grunde fuer jede Art von Daten. Zum Anzeigen einfach¤dit: vllt sollte ich erst aufs datum schauen
ueber die suche gefunden
Code: Alles auswählen
QFile file;
QSqlQuery query2;
for ( int i = 0; i < filenames.size(); i++ )
{
query2.clear();
query2.prepare ( "UPDATE pictures SET data = :data WHERE filename = :filename;" );
file.setFileName ( QDir::currentPath()+filenames[i] );
if ( !file.open ( QIODevice::ReadOnly ) || !file.exists() )
{
cerr << "Error: #" << file.error() << ", Message: \"" << file.errorString().toStdString() << "\" in File " << file.fileName().toStdString() << endl;
continue;
}
query2.bindValue ( ":data", file.readAll() );
query2.bindValue ( ":filename", filenames[i] );
query2.exec();
if (query2.lastError().isValid())
{
cerr << "Error in UPDATE-Statement: " << query2.lastError().text().toStdString();
}
}Code: Alles auswählen
QSqlQuery query ( QString ( "SELECT data FROM pictures WHERE id = %1" ).arg ( img_list[pic] ), imgDb );
QSqlRecord record = query.record();
if ( query.next() )
{
label->setPixmap ( QPixmap::fromImage ( QImage::fromData ( query.value ( 0 ).toByteArray() ) ) );
}