Seite 1 von 1

[gelöst]QMYSQL mit MYSQL-Server 5.1 unter Qt4.2.2

Verfasst: 19. Februar 2010 12:09
von random-access
Hallo liebe Community,

um nicht lange um den heissen Brei zu reden, komme ich direkt zu meinem Problem:

über folgenden Code Versuche ich ein Bild in meine Datenbank zu schreiben, diese ist mit einem "name" vom typTEXT und einem "image" vom typ MEDIUMBLOB aufgebaut:

Code: Alles auswählen

 bool ok = false;
 QImage tmpImage(productImagePath);
 QByteArray image;
 QBuffer buffer(&image);
 ok = buffer.open(QIODevice::WriteOnly);
 if(productImageType.contains("JPG", Qt::CaseInsensitive))
 {
	ok = tmpImage.save(&buffer, "JPG");
 }
 else if(productImageType.contains("JPEG", Qt::CaseInsensitive))
 {
	ok = tmpImage.save(&buffer, "JPEG");
 }
 else if(productImageType.contains("BMP", Qt::CaseInsensitive))
 {
	ok = tmpImage.save(&buffer, "BMP");
 }
 else if(productImageType.contains("PNG", Qt::CaseInsensitive))
 {
	ok = tmpImage.save(&buffer, "PNG");
 }
 else
 {
	ok = tmpImage.save(&buffer);
 }
 char* imgData = image.data();

 QSqlQuery query;
 ok = query.prepare("INSERT INTO product (name, image) VALUES (?, ?)");
 query.bindValue(0, pProduct->GetProductName());
 query.bindValue(1, imgData);

 ok = query.exec();
 QSqlDatabase::database().commit();

 if (query.lastError().isValid())
 {
	qDebug("insert Product Exec:  %s  ", query.lastError().text().toLocal8Bit().constData());
 }
Das Ergebnis ist allerdings nur:
Using unsupported buffer type: -842150451 (parameter: 1) QMYSQL3: Unable to bind value
Was mache ich falsch? habe auch schon veruscht das QByteArray image , bzw. dieses über "image.toBase64()" zu übergeben.

Vielen Dank schonmal für eure Hilfe,

random-access

Verfasst: 19. Februar 2010 12:24
von Christian81
Was soll das mit dem char * ??
Einfach ein QByteArray binden und fertig.

Re: QMYSQL mit MYSQL-Server 5.1 unter Qt4.2.2

Verfasst: 19. Februar 2010 13:00
von random-access
Vielen Dank für deinen Beitrag,

jedoch habe ich auch dies schon versucht:
random-access hat geschrieben: Was mache ich falsch? habe auch schon veruscht das QByteArray image , bzw. dieses über "image.toBase64()" zu übergeben.
random-access
code hierfür wäre demnach:

Code: Alles auswählen

bool ok = false;
	QImage tmpImage(productImagePath);
	QByteArray image;
	QBuffer buffer(&image);
	ok = buffer.open(QIODevice::WriteOnly);
	if(productImageType.contains("JPG", Qt::CaseInsensitive))
	{
		ok = tmpImage.save(&buffer, "JPG");
	}
	else if(productImageType.contains("JPEG", Qt::CaseInsensitive))
	{
		ok = tmpImage.save(&buffer, "JPEG");
	}
	else if(productImageType.contains("BMP", Qt::CaseInsensitive))
	{
		ok = tmpImage.save(&buffer, "BMP");
	}
	else if(productImageType.contains("PNG", Qt::CaseInsensitive))
	{
		ok = tmpImage.save(&buffer, "PNG");
	}
	else
	{
		ok = tmpImage.save(&buffer);
	}
	if(!ok)
	{
		qDebug(productImagePath.toAscii() + " - Fehler beim Speichern in ByteArray!");
	}

    QSqlQuery query;
	ok = query.prepare("INSERT INTO product (name, image) VALUES (?, ?)");
	query.bindValue(0, pProduct->GetProductName());
	query.bindValue(1, image);
	ok = query.exec();

Verfasst: 19. Februar 2010 13:38
von Christian81
Parameter 1 deutet auch eher auf "pProduct->GetProductName()" hin --> was ist das für ein Datentyp?
Passen auch die Datentypen zu den Datentypen in der DB?

Verfasst: 19. Februar 2010 13:46
von random-access
Vielen Dank für deine Antwort,

pProduct->GetProductName() liefert mir einen gültigen QString zurück, der anschließend in 'name' vom typ VARCHAR(255) gesetzt werden soll.

image ist das QByteArray, welches anschliesend in 'image' vom Typ MEDIUMBLOB geschrieben werden soll.
>Meiner Meinung nach entsteht hier der Fehler

Mit freundlichen Grüßen,

random-access

Verfasst: 19. Februar 2010 15:30
von Christian81
Ok, zur Eingrenzung versuche erstmal nur eins von beiden in die DB zu schreiben.
MEDIUMBLOB kenn ich nicht - ist das eine MySQL-Eigenheit? Gibts nicht einfach nur 'blob' ?

Re: QMYSQL mit MYSQL-Server 5.1 unter Qt4.2.2

Verfasst: 23. Februar 2010 11:02
von random-access
Vielen Dank für eure Posts,

habe das Problem gelöst.
random-access hat geschrieben:
QMYSQL mit MYSQL-Server 5.1 unter Qt4.2.2
Using unsupported buffer type: -842150451 (parameter: 1) QMYSQL3: Unable to bind value
Wenn man die falsche qsqlmysql.lib und qsqlmysql.dll verwendet, muss man sich ja eigentlich nicht wundern :oops:

Lösung: einfach Qt\src\plugins\sqldrivers neu übersetzen

Mit freundlichen Grüßen,
random-access.