Преобразование OLE-объектов MS Access обратно в обычные JPEG-файлы - лучший способ? - PullRequest
5 голосов
/ 22 сентября 2008

Справочная информация: у нас есть старая (но важная для бизнеса) база данных SQL Server с интерфейсом MS Access ADP; изначально он был увеличен до SQL Server из ряда баз данных Access.

Эта база данных отслеживает опасные материалы для наших клиентов и хранит большое количество изображений. Эти изображения вставляются из MS Access и помещаются в базу данных как объекты OLE.

Проблемы:

  • Трудно прочитать что-либо, кроме Access / Office
  • Существуют МАССИВНЫЕ затраты на хранение - ~ 10 ГБ изображений занимают более 600 ГБ дискового пространства (!)

У меня такой вопрос: каким образом вы бы порекомендовали конвертировать эти раздутые объекты обратно в простые JPEG? Как только мы сделаем это, мы сможем наконец перенести наш интерфейс из Access в простую веб-систему, и время резервного копирования снова станет управляемым!

Ответы [ 4 ]

5 голосов
/ 22 сентября 2008

Возьмите файл * .bas отсюда http: http://stackoverflow.com/Content/img/wmd/ul.png//www.access-im-unternehmen.de/index1.php?BeitragID=337&id=300 (к сожалению, это немецкий).

Используется библиотека GDI + от MS (входит в стандартную установку Win) для импорта / экспорта изображений в / из Access OLE.

Грубый перевод интерфейса:

  • IsGDIPInstalled: Проверяет установку GDI +
  • InitGDIP: Инициализация GDI +.
  • ShutDownGDIP: Deinit из GDI + (важно использовать!)
  • LoadPictureGDIP: загружает ПОС в объект StdPicture (BMP, GIF, JP (E) G, TIF, PNG, WMF, EMF и ICO).
  • ResampleGDIP: масштабирует рис до новых размеров и при необходимости увеличивает резкость.
  • MakeThumbGDIP: делает миниатюру и заполняет границу цветом.
  • GetDimensionsGDIP: получение размеров в TSize-Struktur в пикселях.
  • SavePicGDIPlus: сохраняет объект изображения в файл в формате BMP, GIF, PNG или JPG (jpg с заданным качеством)
  • ArrayFromPicture: возвращает байтовый массив picutre для помещения pic в поле OLE таблицы.
  • ArrayToPicture: создает байтовый массив поля OLE таблицы, содержащей изображение
1 голос
/ 22 сентября 2008

Используйте инструмент Access MVP Stephen Lebans ExtractInventoryOLE, чтобы извлечь объекты OLE из таблицы в отдельные файлы.

http://www.lebans.com/oletodisk.htm

Согласно Lebans: «НЕ требуется оригинальное приложение, которое служило OLE-сервером для вставки объекта. Поддерживает все документы MS Office, PDF, все изображения, вставленные MS Photo Editor, MS Paint и Paint Shop Pro. Также поддерживает извлечение класса PACKAGE, включая исходное имя файла. "

Кроме того, Access 2007 хранит объекты OLE гораздо эффективнее, чем исторические форматы BMP предыдущих версий, поэтому у вас будет меньше места для хранения и вы сможете сохранить свое приложение Access, если вы конвертируете его из хранилища SQL объемом более 600 ГБ Сервер для доступа 2007 формата ACDB. Время резервного копирования будет управляемым, и вам не придется тратить время на преобразование внешнего интерфейса Access в веб-интерфейс.

1 голос
/ 22 сентября 2008
0 голосов
/ 22 сентября 2008

Я думаю, причина того, что ваша база данных становится настолько раздутой, заключается в том, что JPG также хранятся в виде растровых изображений внутри структуры "OLE-объект", или, как я видел, в зависимости от метода вставки JPEG.

Это не оптимально, но: для каждого изображения в базе данных я бы программно создал фиктивный .doc, содержащий только изображение, затем передал его через преобразование OpenOffice и извлек JPEG из подпапки изображений созданного документа OpenOffice. (который является файлом ZIP).

Затем я заменил бы документы OLE в базе данных на необработанные данные JPEG, но тогда у меня не было бы возможности просто отобразить их в пользовательском приложении (если это не веб-приложение).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...