Как загрузить изображение в БД FireBird?

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Как загрузить изображение в БД FireBird?

Сообщение Andreich » 07.04.2011 09:21:30

Собственно говоря - сабж,.. как это вообще можно сделать?
В своей программе добавляю/изменяю текстовые данные использую SQL запросы. До последнего времени данные были только текстовые и особых проблем не возникало. Теперь необходимо помимо строк (ф.и.о., должность и т.д.) хранить в каждой записи изображение (фото пользователя). Насколько я представляю, загрузить картинку в базу через SQL-скрипт невозможно,.. как быть? Известны ли кому нибудь примеры совместного использования FB и графики?

P.S. Ссылки и примеры приветствуются! :)
Andreich
постоялец
 
Сообщения: 268
Зарегистрирован: 17.04.2008 12:33:43

Re: Как загрузить изображение в БД FireBird?

Сообщение vada » 07.04.2011 10:06:16

Не знаю как в огнеклыле, а в постгресе есть тип поля двоичный массив.
Делается так:
фотка направляется в поток, в конце которого байтовый массив. Этот байтовый массив и записывается в поле.
В обратную сторону, считывается байтовый массив, который направляется в поток заканчивающийся картинкой.
На словах все просто :)
Аватара пользователя
vada
энтузиаст
 
Сообщения: 691
Зарегистрирован: 14.02.2006 13:43:17

Re: Как загрузить изображение в БД FireBird?

Сообщение Brainenjii » 07.04.2011 10:53:16

В огнептице тоже самое - создаётся параметризированный запрос, в параметр загружается поток. Чтение сходным образом.
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Re: Как загрузить изображение в БД FireBird?

Сообщение stikriz » 07.04.2011 14:34:38

Пишется запрос с параметром (update ... set blob_fild = :PHOTO ...),тип параметра указывается BLOB. У таких параметров есть метод LoadFromStream. Какие компоненты доступа? Отсюда и параметр, либо на двоеточие начинается, либо вопрос, либо еще какой символ.
Аватара пользователя
stikriz
энтузиаст
 
Сообщения: 612
Зарегистрирован: 15.03.2006 09:37:47

Re: Как загрузить изображение в БД FireBird?

Сообщение Andreich » 08.04.2011 08:40:03

stikriz писал(а):Пишется запрос с параметром (update ... set blob_fild = :PHOTO ...),тип параметра указывается BLOB. У таких параметров есть метод LoadFromStream. Какие компоненты доступа? Отсюда и параметр, либо на двоеточие начинается, либо вопрос, либо еще какой символ.


Добавит в SQLQuery параметр 'photo', он идет в списке под номером 0.
Пробую загрузить в него что-нибудь (вместо LoadFromStream решил воспользоваться LoadFromFile):
Код: Выделить всё
if OpenDialog1.Execute then
SQLQuery1.Params.Items[0].LoadFromFile(OpenDialog1.FileName, ftBlob);

Проект собирается, запускается по при попытке загрузки ругается: "List index (0) out of bounds." В чем засада?! Что я мог не заметить?
Andreich
постоялец
 
Сообщения: 268
Зарегистрирован: 17.04.2008 12:33:43

Re: Как загрузить изображение в БД FireBird?

Сообщение vada » 08.04.2011 09:51:21

SQL запрос в студию.
Аватара пользователя
vada
энтузиаст
 
Сообщения: 691
Зарегистрирован: 14.02.2006 13:43:17

Re: Как загрузить изображение в БД FireBird?

Сообщение stikriz » 08.04.2011 10:05:26

List index (0) out of bounds." В чем засада?! Что я мог не заметить?


Засада в том, что компонент не создал параметр. Либо неправильно указан параметр - не так, как нужно компоненту в запросе, либо компонент не делает prepare автоматом.
Аватара пользователя
stikriz
энтузиаст
 
Сообщения: 612
Зарегистрирован: 15.03.2006 09:37:47

Re: Как загрузить изображение в БД FireBird?

Сообщение Andreich » 08.04.2011 10:18:54

vada
До запроса дело даже не доходит, ошибка возникает при попытке загрузить данные в параметр! :(

stikriz
Да, похоже на то, что в дизайн-тайм параметр создается некорректно. В списке он как бы есть, но обратится к нему не получается.
Попробую создавать параметр программно...
Andreich
постоялец
 
Сообщения: 268
Зарегистрирован: 17.04.2008 12:33:43


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 47

Рейтинг@Mail.ru