所以我有一个图像文件,我想用 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 数据库中。
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 显示加载数据失败,知道吗?
最佳答案
找到解决方案。代码确实有效,只是我的图像文件已损坏。
关于c++ - Qt 从 Microsoft Access 插入和检索图像文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37817265/