Russian Qt Forum
Ноябрь 23, 2024, 17:57 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Qt 3.3.6 + MySQL 5.0 : непонятка с загрузкой изображений в базу  (Прочитано 7879 раз)
TukiNov
Гость
« : Октябрь 12, 2007, 13:57 »

Приветствую всех Улыбающийся
Такая проблема: Не очень загружаются изображения в базу, не зависимо от формата.
Загружаю двумя способами:
Первый способ:
Код:
QFile f(imageFile);
if ( !f.open( IO_ReadOnly ) ) {
qWarning( "Unable to open data file '%s' - exiting", fileName );
}
QByteArray binaryData = f.readAll();
qWarning( "Data size: %d", binaryData.size() );
// create a table with a binary field
QSqlQuery q;
// insert a BLOB into the table
if ( !q.prepare( "INSERT INTO NSI_IMAGE (IMAGE_BYTE, CODE, IMAGE) VALUES (?, ?, ?)" ) ) {
qWarning( "Unable to prepare query" );
}
q.bindValue( 0, binaryData );
q.bindValue( 1, 1 );
q.bindValue( 2, 1 );
if ( !q.exec() ) {
qWarning( "Unable to execute prepared query " );
q.lastError().showMessage();
}
При файлах < 10 кБ все норм, с файлами > 10 кБ ошибка:
Код:
Data size: 296378
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '????IC(O????)W\n?? H??\n??????D??????[????Z\n+??????????Vr????.????n????%???? ????????A??$<??Bh?~LZi??????\0' at line 1 QMYSQL3: Unable to execute query
Как видите файл 296 кБ.
Второй способ:
Код:
QPixmap * pixmap = new QPixmap(imageFile);
QByteArray ba;
QBuffer buf(ba);
buf.open(IO_WriteOnly);
pixmap->save(&buf, "PNG");
buf.close();
QSqlQuery insertImage;
insertImage.prepare("INSERT INTO NSI_IMAGE (IMAGE_BYTE, CODE, IMAGE) VALUES (:image_byte, :code, :image)");
insertImage.bindValue( ":code", kod );
insertImage.bindValue( ":image_byte", ba);
insertImage.bindValue( ":image", "");
insertImage.exec();
Таже ошибка. Подскажите как исправить Улыбающийся
Заранее спасибо Улыбающийся
« Последнее редактирование: Октябрь 12, 2007, 13:59 от TukiNov » Записан
TukiNov
Гость
« Ответ #1 : Октябрь 14, 2007, 01:36 »

никто не знает ? Грустный
Записан
Вячеслав
Гость
« Ответ #2 : Октябрь 14, 2007, 10:21 »

это , оно-ж вроде на ошибку в запросе ругаеться , кстати чего оно кракозябами ? или 3 qt все текстом гонит(и blob тож) - если так то это жесть Грустный
PS прикрути чего-нибудь типа phpmyadmin (если есть возможность) и повтори этот запрос извне ....
Записан
Kainit
Гость
« Ответ #3 : Октябрь 14, 2007, 12:23 »

1. Отправлять файлы таким образом неразумно. А что если файл на 500 метров? У тебя в памяти будет висеть ByteArray на 500 метров? Используй хотя бы QDataStream.

2. Погляди в MySQL параметры Max Packet Size и Net Buffer length.
У меня были проблемы с отправкой файлов по 10-20 метров и дело было в Max Packet Size, но слава богу, потом мы отошли от такой ереси как хранение здоровых бинарников в базе (и, как мне думается, никто в базе бинарники и не хранит).

3. Хотя, приведенное сообщение об ошибке недвусмысленно указывает на ошибку в синтаксисе запроса...

Попробуй как тролли пишут

Код:
     QSqlQuery query;
     query.prepare("INSERT INTO person (id, forename, surname) "
                   "VALUES (?, ?, ?)");
     query.bindValue(0, 1001);
     query.bindValue(1, "Bart");
     query.bindValue(2, "Simpson");
     query.exec();

в две строчки (хотя это шаманство) и если это поможет, то можно будет сьесть свою треуголку.

4. Понятно что ты пользуешься 3.3.6 не просто так, но всё-таки, может быть имеет смысл пересесть на 4.3.2?

5. Проблема может быть и в кодировках (хотя слабо верится). Попробуй делать что-нибудь типа "SET NAMES ..." при коннекте. Возможно что Qt отправляет UTF-8, а MySQl настроен так что ожидает CP-1251
« Последнее редактирование: Октябрь 14, 2007, 17:09 от Kainit » Записан
TukiNov
Гость
« Ответ #4 : Октябрь 16, 2007, 13:15 »

1. Требование заказчика
2. Посмотрел, добавил, ничего не помагает.
3. Не катит
4. Тоже требование заказчика
5. Проблема не в кодировке так как это бинарник
Что самое интересное в МСВС под Линтер(Посгрес) все норм проходит, в майскул не катит, на оракле не охота тестить.
Может кто нить подскажет как ByteArray перевести например в HEX ?
Записан
Dodge
Гость
« Ответ #5 : Октябрь 16, 2007, 13:33 »

5. Проблема не в кодировке так как это бинарник
Что самое интересное в МСВС под Линтер(Посгрес) все норм проходит, в майскул не катит, на оракле не охота тестить.ъ
Потамучта Линтер не на базе мускуля, а на базе PostgresSQL.
Может кто нить подскажет как ByteArray перевести например в HEX ?
Код:
QByteArray data;
...
qDebug() << "hex text:" << QString( data.toHex() );
Записан
Dodge
Гость
« Ответ #6 : Октябрь 16, 2007, 13:34 »

1. Требование заказчика
...
4. Тоже требование заказчика
...

Судя по всему заказчик Мин Об...  Смеющийся
Записан
Dodge
Гость
« Ответ #7 : Октябрь 16, 2007, 13:37 »

4. Тоже требование заказчика

Кстати если юзаешь последнюю коробку МСВС, то заменив компилятор(в коробке старый совсем), можно собрать qt 4.х Подмигивающий
Записан
TukiNov
Гость
« Ответ #8 : Октябрь 16, 2007, 13:38 »

5. Проблема не в кодировке так как это бинарник
Что самое интересное в МСВС под Линтер(Посгрес) все норм проходит, в майскул не катит, на оракле не охота тестить.ъ
Потамучта Линтер не на базе мускуля, а на базе PostgresSQL.
Может кто нить подскажет как ByteArray перевести например в HEX ?
Код:
QByteArray data;
...
qDebug() << "hex text:" << QString( data.toHex() );
QT 3.3.6 !!!!
Записан
Dodge
Гость
« Ответ #9 : Октябрь 16, 2007, 13:40 »

QT 3.3.6 !!!!

ахр.. да.. сори Смеющийся

МСВС то какой?
Записан
TukiNov
Гость
« Ответ #10 : Октябрь 16, 2007, 13:43 »

QT 3.3.6 !!!!

ахр.. да.. сори Смеющийся

МСВС то какой?
Да я не помню, дело в том что нам пока не разрешили проекы на четвертой кути делать, а так четверка под МСВС есть.
Записан
Dodge
Гость
« Ответ #11 : Октябрь 16, 2007, 13:48 »

... дело в том что нам пока не разрешили проекы на четвертой кути делать, а так четверка под МСВС есть.
Странно... qt миноб сертифицыровал... что то тут не так)

ИМХО писать под мсвс на qt3.x изврат полный...
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #12 : Октябрь 16, 2007, 14:11 »

ИМХО писать под мсвс на qt3.x изврат полный...

Можно ли поинтересоваться, что собой представляет этот изврат?  В замешательстве
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.05 секунд. Запросов: 23.