Сохранить картинку из базы

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сохранить картинку из базы

Сообщение Alexanbar » 18.04.2005 (Пн) 1:21

Есть база mdb-97. В ней есть таблица с Полем Объекта OLE.
Туда записана картинка. Картика записывалась следующим образом.
Через контрол Data привязывался Picturebox. Далее в него загружалась картинка методом LoadPicture.
Пытаюсь сделать обратное преобразование, т.е. из базы сохранить файл - не выходит. Взял маленькую картинку ~1kB. Занёс в базу. При сохранениии создаётся файл ~27kB, ничего общего с картинкой не имеющий. Последний вариант сохранения:
Open pp$ & ".jpg" For Binary As #ff
ReDim ppB(1 To Len(DataPhoto.Recordset("Photo").value))
ppB = DataPhoto.Recordset("Photo").value
Put #ff, 1, ppB 'DataPhoto.Recordset("Photo").value
Close #ff

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 18.04.2005 (Пн) 7:06

Используй Append/GetChunk.
Lasciate ogni speranza, voi ch'entrate.

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 18.04.2005 (Пн) 11:59

Выяснил, наконец, в чём дело.
1) Оказывается, в базе картинка хранится в формате bmp
2) При сохранении любым способом в начало файла добавляется какая-то чума, в том числе при исп. GetChunk.
3) в конец файла добавляются несколько нулей

Приходится вначале искать заголовок bmp- файла (по моим подсчётам это BM), затем отрезать чумовое начало

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 18.04.2005 (Пн) 15:31

Alexanbar писал(а):Приходится вначале искать заголовок bmp- файла (по моим подсчётам это BM), затем отрезать чумовое начало


Угу - так оно и есть - когда-то делал, когда потребовалось чужие картинки повытаскивать.

Сам я хранил картинки как JPG/GIF - то есть писал их в базу не как OLE-поле, а в бинарном виде - все-ж намного меньше места занимают....
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 18.04.2005 (Пн) 16:29

А драйвер-то, наверное, OLEDB использовался? Попробуйте сменить на ODBC - должно пройти.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 18.04.2005 (Пн) 16:35

Ennor писал(а):А драйвер-то, наверное, OLEDB использовался? Попробуйте сменить на ODBC - должно пройти.


Я что - мазохист? Меня OLEDB всегда устраивало и будет устраивать.

Access OLE-объекты (рисунки) хранит bmp-шками, к ним в начале дописывается несколько символов. Драйвер тут ни с какого боку.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 20.04.2005 (Ср) 18:01

С одной стороны, то, что в базе картинки хранятся в bmp, хорошо. По всей видимости, быстрее будут загружаться в Picturebox - ведь распаковывать не надо. Опять же все допустимые картинки приводятся к единому знаменателю после записи в базу - это тоже плюс. Одно время у меня даже затруднения возникли, какое расширение давать файлу при сохранении - оказалось, что всем нужно давать bmp, и не ломать голову.
Одно, естественно, плохо - места больше занимают - раз эдак в 10-20. Возможно, что это будет сказываться и на скорость работы с базой(?)

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 21.04.2005 (Чт) 8:07

Alexanbar писал(а):С одной стороны, то, что в базе картинки хранятся в bmp, хорошо. По всей видимости, быстрее будут загружаться в Picturebox - ведь распаковывать не надо. Опять же все допустимые картинки приводятся к единому знаменателю после записи в базу - это тоже плюс. Одно время у меня даже затруднения возникли, какое расширение давать файлу при сохранении - оказалось, что всем нужно давать bmp, и не ломать голову.
Одно, естественно, плохо - места больше занимают - раз эдак в 10-20. Возможно, что это будет сказываться и на скорость работы с базой(?)


На скорости работы не скажется. На размере базы - само собой, если картинок много то ограничение на размер довольно быстро будет исчерпано.

Вывод картинок в JPG естевственно несколько притормаживает. GIF-ы те побыстрей. В общем, выбор формата зависит от того что в картинках хранится... Но в BMP-шках я бы в любом случае хранить не стал.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 21.04.2005 (Чт) 18:49

У меня в настоящее время в базе 36 фоток (ну и прочих данных), и она занимает порядка 65 МБ. Фотки разных размеров.

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 21.04.2005 (Чт) 19:28

Как вариант, можно сделать отдельную базу, в ней одну таблицу с двумя полями - первичный ключ и собсно картинка. К ней, есессно, отдельный коннект из программы. В этом случае работа с данными не будет никак зависеть от наличия / количества / размера картинок.


Вернуться в Базы данных

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

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

    TopList