Qt从Microsoft Access

时间:2016-06-14 16:16:20

标签: c++ qt ms-access

所以我有一个图像文件,我想用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显示加载数据失败,有什么想法吗?

1 个答案:

答案 0 :(得分:0)

找到解决方案。代码实际上有效,只是我的图像文件已损坏。