Seite 1 von 1
Bilder in mySQL Datenbank einbinden?
Verfasst: 9. November 2006 11:14
von sea_bear
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
Verfasst: 9. November 2006 11:47
von BartSimpson
Du kannst es als QByteArray in die DB stecken.
Verfasst: 9. November 2006 12:02
von sea_bear
BartSimpson hat geschrieben:Du kannst es als QByteArray in die DB stecken.
Ja aber wie mache ich es als Code ausgedrückt? das ist ja gerade mein Problem!
Tobias
Verfasst: 9. November 2006 12:16
von BartSimpson
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();
Wobei das Feld Bild in der Tabelle denn besser ein BLOB sein sollte:)
Verfasst: 12. März 2008 14:27
von C167
ich hab hier mal das ganze fertig fuer eine SQLite-Datenbank geschrieben:
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();
}
}
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
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() ) ) );
}
¤dit: vllt sollte ich erst aufs datum schauen

ueber die suche gefunden