Программирование MsAccess, VB, VBA

  

© am 1999-2009

Добро пожаловать, незнакомец! [вход]   С Вами на сайте:  Профиль пользователяAntПрофиль пользователяDr.LivsiПрофиль пользователяKretovПрофиль пользователяАнатолий (Киев)

|  Домой   |   Новости   |   Гостевая   |   Форумы   |   Поиск   |   Страницы Авторов   |

Запись графических объектов, хранящихся в поле OLE, в файл bmp.

(обращений: 3950 с 23.06.2006)

Разделы:  Разное, Полезные функции

 

Описание: Проще говоря, выгрузка графических объектов, хранящихся в базе в поле типа OLE, в графический файл формата bmp.

Автор: Дмитрий Сонных (AKA Joss)

Добавил на сайт: Профиль пользователяJoss 23.06.2006

Скачать:

sd_dbFoto1_2k.zip (239065 байт) (скачиваний: 1536 с 23.06.2006)
На форуме уже много раз всплывал такой вопрос: "У меня есть база данных, где в таблице, в поле типа OLE содержатся рисунки (фотографии, схемы и т.д.). Как мне теперь их оттуда достать?" Когда-то давно я сам столкнулся с проблемой хранения изображений в базе данных. В результате появилась статья "Хранение изображений в базе данных" по адресу http://am.rusimport.ru/MsAccess/topic.aspx?ID=271 . Судя по скачанным примерам, около 500 посетителей ею заинтересовались. Потихоньку я выкладывал примеры к статье, обновлял информацию. И вот, наконец, добрался и до этого примера. Немного подумав, я решил разместить его отдельной статьей, т.к. о том, как хранить графику в поле OLE написано много, а вот о том, как её достать оттуда - мало.
И так, приступим. Идея и многое из кода позаимствовано с сайта http://www.lebans.com . Идея такова - на форме есть "присоединенная рамка объекта" (присоединенный OLE), куда выводится изображение из базы данных. Переводим на этот объект фокус и копируем его содержимое в буфер обмена. Затем копируем содержимое буфера обмена в файл с расширением bmp. Графический файл готов. Правда, надо не забыть о заголовке bmp-файла. Ну, как решена эта проблема, можно узнать, посмотрев код.
Есть и другой путь. Вытащить OLE-объект прямо из поля базы данных, отрезать заголовок OLE, прикрепить заголовок bmp, и записать на диск. У меня готов для демонстрации пока первый вариант. Второй выложу, когда сделаю.

[Back]


Текущий рейтинг:
0 из 5 (проголосовало:0).
Здравствуйте!
Для участия в рейтинге необходимо залогиниться на сайт.
Это сделано для того, чтобы более точно производить оценку статей (чтобы одному и тому же человеку было труднее голосовать несколько раз, портя тем самым статистику.
Эта процедура очень быстрая и, надеюсь, Вас не затруднит :).
Все мысли по поводу работы сайта всегда можно высказать на форуме!
Вход на сайт

Обсуждение статьи:   
Объекты OLE в БД Madam   
А если хранимый файл типа XLS или DOC? Возможно решение?
26.07.2006 18:57

Решение-то возможно... Профиль пользователяJoss   
Но маленький вопрос - зачем? Я этот кусочек написал потому, что встречаются ситуации, когда графику вставляли не из стандартного MSPAINT, а из PhotoShop или какой-нибудь другой экзотической программы. Тогда при двойном щелчке на рисунок, Access выдавал, что приложение загрузить невозможно. А корректировать рисунки как-то надо. А Word и Excel стоят наверняка у всех. А тогда просто запускаешь файл в соответствующем приложении и сохраняешь его на диск.
31.07.2006 10:37

Re:Решение-то возможно... Madam   
Проблема в том, что есть задача, которая ведет архив документов (файлы xls и doc) в БД в полях формата OLE. Работает нормально - сохранет, извлекает. Однако сейчас понадобился доступ к этому архиву из внешних задач (.NET например). Программист говорит, что для него напряжно извлекать файлы из OLE (он не знает структуру заголовка и хвоста в поле ole) и предлагает мне писать в двоичном формате.
31.07.2006 11:06

Re:Re:Решение-то возможно... Leon   
делал примерно то же самое. использовал GetChunk и AppendChunk
31.07.2006 12:11

Изменить структуру базы. Профиль пользователяJoss   
Я бы предложил изменить структуру базы. Хранить в ней не докуенты, а ссылки на документы, а документы хранить в отдельном каталоге. Во-первых уменьшился объем базы, да и запросы стали бы отрабатываться быстре, и доступ к документам из других программ появился бы,
01.08.2006 10:06

Re:Изменить структуру базы. Leon   
Joss писал:
...и доступ к документам из других программ появился бы

а вот тут нужно по-осторожнее...
01.08.2006 10:18

Re:Re:Изменить структуру базы. Madam   
Исторически сложилось :)
Есть накопленные архивы с файлами в OLE. Поэтому структура меняться не будет. Да и разрозненные файлы труднее сопровождать. Опятьть же - хранить абсолютную ссылку - не очень хорошо, а если путь изменится к архиву? Придется таки менять формат хранения файлов на двоичный. Или может кто-то подскажет как из .NET доставать данные из OLE.
01.08.2006 12:05

Re:Re:Re:Изменить структуру базы. Leon   
GetChunk и AppendChunk
поле OLE для Access - байтовый массив
01.08.2006 15:26

Re:Re:Re:Re:Изменить структуру базы. Madam   
Спасибо - добрые люди :)
Будут вопросы - буду писать еще.
01.08.2006 15:39