所以我有一个图像文件,我想用Microsoft Object数据类型存储在Microsoft Access数据库中。使用http://snipplr.com/view/40559/a-pratical-example-of-how-write-and-read-images-into-mysql-tablesusing-trolltech-qt4c/
中的示例使用Qt,我设法将图像作为二进制文件存储到Microsoft Access DB中。
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显示加载数据失败,有什么想法吗?
答案 0 :(得分:0)
找到解决方案。代码实际上有效,只是我的图像文件已损坏。