2016-06-14 3 views
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は、負荷データが失敗を示す任意のアイデアをスニペット?

+0

'QPixmap'は生の画像データを読み取ることを意図しています。代わりに[QImage :: loadFromData](http://doc.qt.io/qt-5/qimage.html#loadFromData)を試してみてください。 –

+0

どちらも実際に試しましたが、依然として同じ結果です。 – ReverseEngineer

答えて

0

解決策が見つかりました。コードは実際には機能しますが、私のイメージファイルは壊れています。

関連する問題