1
私はOLEオブジェクトのデータ型でMicrosoft Accessデータベースに保存したい画像ファイルを持っています。例はhttp://snipplr.com/view/40559/a-pratical-example-of-how-write-and-read-images-into-mysql-tablesusing-trolltech-qt4c/Qt Microsoft Accessから画像ファイルを挿入して取得します
Qtを使用して、Microsoft Accessデータベースにイメージをバイナリとして保存することができます。
void insertdb()
{
QByteArray arr;
QFile f("C:\\Users\\cerf\\Downloads\\1.jpeg");
if (f.open(QIODevice::ReadOnly))
{
arr = f.readAll();
f.close();
}
QSqlDatabase::database().transaction();
Database db; /*this is from the database class*/
db.connect("D:\\Safebox.mdb");
QSqlQuery *q = new QSqlQuery(db.getDatabase());
q->prepare("INSERT INTO Table1 (image) VALUES (:image);");
q->bindValue(":image", arr);
q->exec();
if (q->lastError().isValid())
{
qDebug() << q->lastError().text();
QSqlDatabase::database().rollback();
}
else
QSqlDatabase::database().commit();
delete q;
}
、これはMS Accessでimage
を示すデータである。しかし、私は再び画像を取得しようとすると、以下で、
void retrieve()
{
QSqlDatabase::database().transaction();
Database db;
db.connect("D:\\Safebox.mdb");
QSqlQuery *q = new QSqlQuery(db.getDatabase());
q->prepare("SELECT ID, image FROM Table1 WHERE ID=:id");
q->bindValue(":id", 21);
q->exec();
q->next();
QByteArray ba1 = q->value(1).toByteArray();
QPixmap pic;
if (!pic.loadFromData(ba1))
qDebug() << "load data fail";
ui.label->setPixmap(pic);
QSqlDatabase::database().commit();
delete q;
}
qdebugは、負荷データが失敗を示す任意のアイデアをスニペット?
'QPixmap'は生の画像データを読み取ることを意図しています。代わりに[QImage :: loadFromData](http://doc.qt.io/qt-5/qimage.html#loadFromData)を試してみてください。 –
どちらも実際に試しましたが、依然として同じ結果です。 – ReverseEngineer