|
|
(обращений: 3950 с 23.06.2006)
Разделы:
Разное, Полезные функции
|
Описание: Проще говоря, выгрузка графических объектов, хранящихся в базе в поле типа OLE, в графический файл формата bmp. Автор: Дмитрий Сонных (AKA Joss) Добавил на сайт: Joss 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).
 |
Здравствуйте! Для участия в рейтинге необходимо залогиниться на сайт. Это сделано для того, чтобы более точно производить оценку статей (чтобы одному и тому же человеку было труднее голосовать несколько раз, портя тем самым статистику.
Эта процедура очень быстрая и, надеюсь, Вас не затруднит :).
Все мысли по поводу работы сайта всегда можно высказать на форуме!
Вход на сайт
|
|
|
|
|
|
А если хранимый файл типа XLS или DOC? Возможно решение? |
26.07.2006 18:57 |
|
Но маленький вопрос - зачем? Я этот кусочек написал потому, что встречаются ситуации, когда графику вставляли не из стандартного MSPAINT, а из PhotoShop или какой-нибудь другой экзотической программы. Тогда при двойном щелчке на рисунок, Access выдавал, что приложение загрузить невозможно. А корректировать рисунки как-то надо. А Word и Excel стоят наверняка у всех. А тогда просто запускаешь файл в соответствующем приложении и сохраняешь его на диск. |
31.07.2006 10:37 |
|
Проблема в том, что есть задача, которая ведет архив документов (файлы xls и doc) в БД в полях формата OLE. Работает нормально - сохранет, извлекает. Однако сейчас понадобился доступ к этому архиву из внешних задач (.NET например). Программист говорит, что для него напряжно извлекать файлы из OLE (он не знает структуру заголовка и хвоста в поле ole) и предлагает мне писать в двоичном формате. |
31.07.2006 11:06 |
|
делал примерно то же самое. использовал GetChunk и AppendChunk |
31.07.2006 12:11 |
|
Я бы предложил изменить структуру базы. Хранить в ней не докуенты, а ссылки на документы, а документы хранить в отдельном каталоге. Во-первых уменьшился объем базы, да и запросы стали бы отрабатываться быстре, и доступ к документам из других программ появился бы, |
01.08.2006 10:06 |
|
| | Joss писал: | ...и доступ к документам из других программ появился бы | а вот тут нужно по-осторожнее... |
01.08.2006 10:18 |
|
Исторически сложилось :) Есть накопленные архивы с файлами в OLE. Поэтому структура меняться не будет. Да и разрозненные файлы труднее сопровождать. Опятьть же - хранить абсолютную ссылку - не очень хорошо, а если путь изменится к архиву? Придется таки менять формат хранения файлов на двоичный. Или может кто-то подскажет как из .NET доставать данные из OLE. |
01.08.2006 12:05 |
|
GetChunk и AppendChunk поле OLE для Access - байтовый массив
|
01.08.2006 15:26 |
|
Спасибо - добрые люди :) Будут вопросы - буду писать еще. |
01.08.2006 15:39 |
|
|