Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
|
Stanislaus |
3.9.2008, 15:54
Сообщение
#1
|
|
Студент ![]() Группа: Новичок Сообщений: 17 Регистрация: 23.4.2008 Пользователь №: 156 Спасибо сказали: 0 раз(а) Репутация: 0
|
Маленькие файлики записываются без проблем, хотя и подвисает операция вставки секунд на 5...
При попытке записать в БД бинарник большого размера (напр. около 30 мегабайт)... Далее следует виновник эксепшена... Подключение к БД Если кто сталкивался, помогите плиз. Собираю на Microsoft Visual Studion 2008 Express Edition, Qt 4.4.0 Open Source.
Причина редактирования: используйте параметр, code=cpp
|
|
|
|
|
Litkevich Yuriy |
3.9.2008, 16:53
Сообщение
#2
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94
|
Цитата(Stanislaus @ 3.9.2008, 19:54) Link При попытке записать в БД бинарник большого размера (напр. около 30 мегабайт)... а БД поддерживает такой размер?
|
|
|
|
|
Stanislaus |
3.9.2008, 17:30
Сообщение
#3
|
|
Студент ![]() Группа: Новичок Сообщений: 17 Регистрация: 23.4.2008 Пользователь №: 156 Спасибо сказали: 0 раз(а) Репутация: 0
|
Цитата(Litkevich Yuriy @ 3.9.2008, 17:53) Link а БД поддерживает такой размер? Из того, что мне удалось найти, bytea поддерживает примерно до 1Gb (Link), поэтому смею предположить, что тут проблема не в ограничениях БД (PostgreSQL 8.2.*), а в ограничениях Qt... Может быть ограничения QString, который используется в QSqlQuery? В принципе, как обходной вариант, можно раздробить файл на фрагменты, записать фрагментами в БД и там уже сконкантенировать в единое целое, но уж очень удобно было бы, если бы он единым целым сразу записывался. |
|
|
|
|
Litkevich Yuriy |
3.9.2008, 17:37
Сообщение
#4
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94
|
вобще непонятно причем здесь QString. Вдь ты использушь двоичный масив и поидее должна вызыватся функция:
Linkв ней нет QString Я незнаком с Постгре, но есть такая заметка: Binary Large Objects (BLOB) are supported through the BYTEA field type in PostgreSQL server versions >= 7.1. Может тебе понятно о чем речь? |
|
|
|
|
Stanislaus |
3.9.2008, 17:43
Сообщение
#5
|
|
Студент ![]() Группа: Новичок Сообщений: 17 Регистрация: 23.4.2008 Пользователь №: 156 Спасибо сказали: 0 раз(а) Репутация: 0
|
Цитата(Litkevich Yuriy @ 3.9.2008, 18:32) Link вобще непонятно причем здесь QString. Вдь ты использушь двоичный масив и поидее должна вызыватся функция: Linkв ней нет QString Именно она и вызывается. Но, насколько я понимаю, QSqlQuery пытается скомпоновать запрос из в что в итоге окажется QString, который отправляется на сервер, но QString в случае большого файла вылезает за какие-то нормы или открывает некий баг... или все по другому происходит? |
|
|
|
|
Litkevich Yuriy |
3.9.2008, 17:45
Сообщение
#6
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94
|
И к стати, ты не пробывал вызвать такую функцию:
db_b.driver().hasFeature (QSqlDriver::BLOB) что он скажет, имеет драйвер такую возможность или нет? Может она толком не реализована. |
|
|
|
|
Stanislaus |
3.9.2008, 18:10
Сообщение
#7
|
|
Студент ![]() Группа: Новичок Сообщений: 17 Регистрация: 23.4.2008 Пользователь №: 156 Спасибо сказали: 0 раз(а) Репутация: 0
|
Цитата(Litkevich Yuriy @ 3.9.2008, 18:45) Link И к стати, ты не пробывал вызвать такую функцию: db_b.driver().hasFeature (QSqlDriver::BLOB) что он скажет, имеет драйвер такую возможность или нет? Может она толком не реализована. db_b.driver()->hasFeature(QSqlDriver::BLOB) возвращает true Вот к чему привел дебаггинг... Во время обработки первого параметра, которым является бинарник....
|
|
|
|
|
ViGOur |
3.9.2008, 18:20
Сообщение
#8
|
![]() Мастер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: 40
|
Цитата(Stanislaus @ 3.9.2008, 16:54) Link Может быть так: ?И какого типа у тебя d->data? Извини, отставить d->size - size, перепутал местами Src и Dest... Проверь выходит ли за область и всегда ли в i или size правильные значения. Сообщение отредактировал ViGOur - 3.9.2008, 18:16 |
|
|
|
|
Litkevich Yuriy |
3.9.2008, 18:41
Сообщение
#9
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94
|
Цитата(ViGOur @ 3.9.2008, 22:20) Link Что-то мне не нравится этот код, а ты уверен, что не выходишь за область выделенной памяти? а это код Тролей Цитата(Stanislaus @ 3.9.2008, 22:10) Link val = driver()->formatValue(f); // тут ненадолго задумывается.... мабуть драйвер таки не доделаный, надо у тролей в трекере поискать
query = query.replace(i, 1, driver()->formatValue(f)); // и тут вылетает ексепшн... |
|
|
|
|
Tonal |
4.9.2008, 11:28
Сообщение
#10
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 452 Регистрация: 6.12.2007 Из: Новосибирск Пользователь №: 34 Спасибо сказали: 69 раз(а) Репутация: 17
|
Если верить этому коду, то Qt вместо параметров явным образом подставляет значения перед отправкой SQL-я на сервер.
А на длину SQL-я могут быть довольно сильные ограничения (Firebird/Interbase < 32к). Если это так, то с лучше с базой работать сторонними либами, которые умеют работать с честными параметрическими запросами сервера... Сообщение отредактировал Tonal - 4.9.2008, 11:29 |
|
|
|
![]() ![]() ![]() |
|
Текстовая версия | Сейчас: 23.12.2025, 12:04 |