Solved QT 5.8 image from database error
-
@VRonin pixdata is QByteArray, pixmap is QPixmap.
-
Might be a silly question but did you check that the data was correctly saved in the database ?
-
@SGaist I modified the query to:
query.prepare("select DATALENGTH(picture), picture from ads");
and
qDebug() << "image size:" << query.value(0).toInt();
The image size is 1715323, it is the uploaded file size in bytes, and the sqsh and management studio restore more than 8 bytes.
-
Ok, after some digging, the problem is with
varbinary(MAX)
change it tovarbinary(8000)
and everything works. of course this is a problem for you as picture > 8000 bytes.
EDIT.
I was trying to replicate a minimal example to submit a bug report but couldn't reproduce (Qt 5.5 and 5.9).
What version of Qt are you using?CREATE TABLE [dbo].[TestBinary]( [TestMax] [varbinary](max) NULL, [TestNum] [varbinary](8000) NULL ) INSERT INTO TestBinary (TestMax ,TestNum) VALUES (0x89504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B189504E470D0A1A0A0000000D494844520000078000000438080200000067B1 ,0x89504E470D0A1A0A0000000D494844520000078000000438080200000067B1 )
#include <QApplication> #include <QSqlDatabase> #include <QSqlQuery> #include <QDebug> bool openDB(QSqlDatabase& db) { if (!db.isValid()) { db = QSqlDatabase::addDatabase("QODBC", "MyDatabase"); db.setDatabaseName(<INSERT HERE YOUR CONNECTION STRING>); } if (db.isOpen()) return true; if (db.open()) return true; return false; } int main(int argc, char *argv[]) { QApplication app(argc,argv); QSqlDatabase db; if(!openDB(db)) return -1; QSqlQuery testQuery(db); testQuery.prepare("SELECT TestMax,TestNum FROM TestBinary"); if(!testQuery.exec()) return -1; if(!testQuery.next()) return -1; const QByteArray TestMax = testQuery.value(0).toByteArray(); const QByteArray TestNum = testQuery.value(1).toByteArray(); qDebug() << "varbinary(MAX) size: " << TestMax.size(); qDebug() << "varbinary(8000) size: " << TestNum.size(); return 0; }
correctly outputs:
varbinary(MAX) size: 8122 varbinary(8000) size: 31
-
@VRonin I used a tds plugin earlier, I have rebuild Qt with odbc driver, but I can not connect to the database, which driver you use?
-
@Kutyus ODBC from online installer of Qt 5.5 and 5.9 on Windows for MSVC2013
-
@VRonin Ahh, I use a Banana Pi with linux.
I connected with odbc over freetds, but the pixdata size is 4096 :(
I try to upgrade freetds now. I think it is a driver bug. -
@VRonin Not working, i compiled the freetds 1.00.47, and i recompiled the tds plugin, but the pixdata is only 8 byte :(
-
Ok, now that we know it's a plugin problem we can see if we can do something about it.
The first thing that comes to mind is storing your binarydata in a
varchar
(no need for unicode) using base64.This is easy if you use QByteArray for both reading and writing, just use
toBase64()
-
@VRonin Thank you for tip, the trick with base64 encoded file (to varchar(max) field) is working.