Преобразование «OLE-объектов» MS Access обратно в простые JPEG-файлы - лучший способ?

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

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

Проблемы следующие:

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
5
0
18 943
4

Ответы 4

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

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

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

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

Он использует GDI + lib от 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: возвращает байтовый массив изображения, чтобы поместить изображение в поле OLE таблицы.
  • ArrayToPicture: создает байтовый массив поля OLE таблицы, содержащей изображение

Спасибо за это, я попробую. Учитывая объем данных, которые мне нужно передать, я могу в конечном итоге преобразовать изображения в пакетах за ночь, пока я подключаю новый интерфейс. Оценил!

Keith Williams 22.09.2008 15:59

И снова ссылка: http://www.access-im-unternehmen.de/index1.php?BeitragID=337&id=300

вы могли бы подумать об изменении своего предыдущего ответа и исправлении этого форматирования ссылки?

Ilya Kochetov 22.09.2008 15:58

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

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

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

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

Хорошо работает с форматами .mdb и .mde Access. У меня такая же проблема с файлом .accdb.

quantme 15.03.2011 17:46

Другие вопросы по теме