C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Подгрузка картинки в БД
_LucID
Отправлено: 18.01.2006, 21:59


Ученик-кочегар

Группа: Участник
Сообщений: 7



Как можно из объекта TBitmap, или с файла,загрузить картинку в Базу Данных?

Работаю с Sybase SQL Anywhere. Там картинка хранится, как набор битов--в чистом виде кароче. Пробывал делать SQL запросом, но при его формировании: 1) уходит довольно таки много времени (чтиение с файла по битно); 2) чтение происходит в строку AnsiString, которая обрезается (хотя написано в документации--безразмерная smile.gif ).

Помогите...
Valdemar
Отправлено: 19.01.2006, 10:20


Мастер участка

Группа: Участник
Сообщений: 433



Сделайте параметризированный запрос на вставку картинки. Перед выполнением запроса считывайте данные в параметр из файла (метод LoadFromFile) или потока (метод LoadFromStream). Методы записи данных в параметр зависят от компонент доступа к БД.
_LucID
Отправлено: 19.01.2006, 13:12


Ученик-кочегар

Группа: Участник
Сообщений: 7



Я и делаю такой запрос. При считывании из файла считывается только то, что расположено до первого символа '<!--POST BOX-->'...хотя тип ftGraphic (подставлял и другие типы-также...)

Вот отрывки:

String SQL_Str = "INSERT INTO DBA.MainTable(ID,Profile_N,Dhole_N,Depth_from,Depth_to,pic_depth,description,picture,del_cond) Values(0,"+Profile->Text+","+Dhole->Text+","+DFrom->Text+","+DTo->Text+","+DFoto->Text+","+Desc->Text+",:Foto,0)";

...

DataModule1->TempQuery->Params->Items[0]->LoadFromFile(File_Name->Text,ftGraphic);

и ничего-загружает пару байт... а потом при запросе выдает ошибку синтаксическую-на месте значения параметра стоит знак вопроса...
В чем проблема?
olegenty
Отправлено: 19.01.2006, 13:36


Ветеран

Группа: Модератор
Сообщений: 2412



это не совсем параметризованный запрос. зачем он динамически-то формируется??? сформируйте его один раз, и пользуйтесь. да, и совсем не обязательно, чтобы параметр был ftGraphic, намного лучше просто ftBlob.
_LucID
Отправлено: 19.01.2006, 15:37


Ученик-кочегар

Группа: Участник
Сообщений: 7



QUOTE (olegenty @ 19/01/2006, 13:36)
это не совсем параметризованный запрос. зачем он динамически-то формируется???

Потому что пользователь вот те все данные вводит в процесссе работы...я думал с параметрами, но так ка-то удобнее мне)...это ж добавление записи... Кажется проблему я решил... теперь осталась еще одна..ээ..мелочь: уже с выгрузкой фотографии из базы в приложение...
olegenty
Отправлено: 19.01.2006, 16:41


Ветеран

Группа: Модератор
Сообщений: 2412



и в чём проблема заключается?
прямо на этом сайте есть ImageLib, рекомендую скачать и установить. smile.gif проблемы с физуализацией картинок пропадут раз и навсегда.
_LucID
Отправлено: 19.01.2006, 19:35


Ученик-кочегар

Группа: Участник
Сообщений: 7



QUOTE (olegenty @ 19/01/2006, 16:41)
и в чём проблема заключается?
прямо на этом сайте есть ImageLib, рекомендую скачать и установить. smile.gif проблемы с физуализацией картинок пропадут раз и навсегда.

Не)) хочу сам разобраться во всем))
_LucID
Отправлено: 19.01.2006, 19:59


Ученик-кочегар

Группа: Участник
Сообщений: 7



Реальная проблема! Режет рисунки! Обрезает и чем рисунок больше тем сильнее обрезает его!

DataModule1->TempQuery->Close();
DataModule1->TempQuery->SQL->Clear();

// Формирую запрос динамически (Он есть в предыдущих постах)
DataModule1->TempQuery->SQL->Add(SQL_Str);

// вот тут вот я загружаю БЛОБ — фотографию
DataModule1->TempQuery->Params->Items[0]->LoadFromFile(File_Name->Text,ftBlob);

и оно ее как-то некорректно загружает--обнуляет некоторые пикселы (даже не некоторые, а БОЛЬШУЮ часть снимка!!!)
Я вложил файл--это скрин... Вот почему появляется эта черная область?

User Attached Image Скачать файл
Безымянный.rar


_LucID
Отправлено: 20.01.2006, 16:31


Ученик-кочегар

Группа: Участник
Сообщений: 7



Нашел проблему... это сама база.. хотя не пойму: неужели разработчики такие бараны?!

Вобщем: Тип поля — image

делаю запрос (в самой базе — Interactive SQL):

UPDATE mainTable
SET Picture = xp_read_file( 'D:\_LucID\541489.bmp' )
WHERE ID = 0;

и..оно записует в поле только около 33000 байт..вообщем — размер Integera базы... я в шоке... прийдется Менять Базу?!... ужОс...
переходить на СКЛ-сервер?....Что делать?...
Guest
Отправлено: 20.01.2006, 17:46


Не зарегистрирован







QUOTE

LONG BINARY
Usage
The maximum size is limited by the maximum size of the database file (currently 2 gigabytes).
Standards and compatibility
· SQL/92    Vendor extension.
· Sybase    Not supported by Adaptive Server Enterprise.

_LucID
Отправлено: 20.01.2006, 19:19


Ученик-кочегар

Группа: Участник
Сообщений: 7



QUOTE (Guest @ 20/01/2006, 17:46)
QUOTE

LONG BINARY
Usage
The maximum size is limited by the maximum size of the database file (currently 2 gigabytes).
Standards and compatibility
· SQL/92    Vendor extension.
· Sybase    Not supported by Adaptive Server Enterprise.

Факт, остается фактом: больше размера Integer рисунок не загружается
А это и я читал...

Вернуться в Работа с базами данных в C++Builder