[identity profile] http://users.livejournal.com/_the_hedgehog_/ posting in [community profile] useful_faq
Здравствуйте!
Требуется сохранять в MS Access базе PDF файлы.
По аналогии с почтовыми вложениями.
Чтоб можно было *.pdf файл открыть на просмотр.
Помогите, пожалуйста!

Date: 2008-04-30 11:42 am (UTC)
From: [identity profile] jorr.livejournal.com
По хорошему, проще сделать гиперссылку.
Напрямую, вроде, не интегрируется.

Date: 2008-04-30 12:04 pm (UTC)
From: [identity profile] langsamer.livejournal.com
Там есть такой тип поля, как OLE-Object. Так что в принципе возможно. Но оочень геморройно по части обработки - раз, и размер базы будет расти чуть ли не экспоненциально - два, соответственно будет замедляться скорость работы. Так что очень советую складывать pdf-ки в отдельный каталог, а в базе хранить пути к ним...

Date: 2008-04-30 12:23 pm (UTC)
From: [identity profile] jorr.livejournal.com
Именно это я и посоветовал.
Ипло того, если вставлять в виде окошка для просмотра, намучаешься потом с немасштабиремостью pdf в Ассеsse.

Date: 2008-04-30 12:37 pm (UTC)
From: [identity profile] jorr.livejournal.com
Можно задействовать почтовый клиент.
Пользователь, сканируя файл, пересылает его на групповой почт. ящик, откуда он автоматом выкладыается в каталог с ограничением по правам.
Ссылка будет сгенерирована автоматом, удаление файлов невозможно.
Через задницу, конечно, но зато будет работать.
Для автоматизации процесса добаления ввести простую кнопочную форму,
вывод данных - в виде формы/отчёта.

Date: 2008-04-30 12:52 pm (UTC)
From: [identity profile] jorr.livejournal.com
Вполне возможно.
Во встроенном Visual можно это сделать достаточно просто.
Кстати, это действительно проще, чем почту подцеплять.

Date: 2008-04-30 03:27 pm (UTC)
From: [identity profile] jorr.livejournal.com
Создаёте кнопку, на кнопку вешаете макрос.
Макрос создаётся заранее.
В макросе запускаете сканирование
Следующий - открытие папки и сохранение выбраного файла.

Date: 2008-05-01 07:54 am (UTC)
From: [identity profile] alauxdo.livejournal.com
Извините, но Ваш совет вообще глупый! :(

1) Макросы в Аксесе это совсем не то, что Вы себе наверное представляете, они не могут "запустить сканирование", ибо колличество выполняемых макросом команд очень ограничено. Аскеру нужен не макрос, а VBA-скрипт.
2) Аттачменты хранятся аутлуком не в "папке", а в бинарном формате в файле .pst, поэтому "открывать и сохранять" там вообще нечего, необходимо через предоставляемый Аутлуком OLE-Server получить доступ к базе и методами Аутлука опять таки сохранять аттачи.

Date: 2008-05-01 12:00 pm (UTC)
From: [identity profile] jorr.livejournal.com
Понятно, что написав скрипт, всё можно сделать куда удобней, но меня просили хоть како-то решение.
С минимальными затратами.

Date: 2008-05-01 12:31 pm (UTC)
From: [identity profile] alauxdo.livejournal.com
Макросы в Аксесе не имеют данной функциональности...

Date: 2008-05-01 07:50 am (UTC)
From: [identity profile] alauxdo.livejournal.com
Сохранять все аттачменты можно как из MS Access VBA, так и непосредственно из самого Outlook.
Первый случай более "геморойный", потому что Аутлук обычно ограничивает доступ через OLE-сервер к своим данным, поэтому гораздо проще написать на VBS макрос для самого Outlook, который сложит все аттачи в отдельную папку.
Если, тем не менее, Вы хотите делать это из Аксеса, то порядок действий такой:
1) сначала нужно подключить DLL-библиотеку Outlook (в среде разработки "Опции" - "Ссылки") к вашей mdb.
2) после того, как эта библиотека подключена у Вас появится возможность определять новые типы данных, в частности Outlook.Application. В этом типе данных доступны несколько интересных коллекций, в том числе коллекция писем, коллекция открытых окон и прочее. Каждое письмо представляет собой объект MailItem, которые поддерживает все необходимые нам методы (в частности добавить или удалить аттачмент).

Date: 2008-05-07 06:42 am (UTC)
From: [identity profile] alauxdo.livejournal.com
Object Library уже правильная библиотека.
Я пошлю сейчас Вам один проект, где я активно работаю с Аутлуком.
Проект, что я упомянул Выше, я не нашел тогда дома, а на работе я еще толком не был в этом месяце (буду только в пятницу), поэтому пока не мог выслать.
Предлагаю дальше общение вести по э-мейл, письмо от меня Вы получите через несколько минут.

Date: 2008-05-07 06:58 am (UTC)
From: [identity profile] alauxdo.livejournal.com
Письмо послал. Если вдруг не дошло -- смотрите в спаме.
Мой адрес -- как мое имя здесь только без буквы икс на gmail.com.

Date: 2008-05-07 03:03 pm (UTC)
From: [identity profile] alauxdo.livejournal.com
Mail.Ru не принимает почту с моего рабочего адреса, откуда я пытался послать обещанный проект. Дайте другой е-мейл.

Date: 2008-05-01 07:41 am (UTC)
From: [identity profile] alauxdo.livejournal.com
Я работаю программистом для MS Access уже более года, в наших проектах в базе сохраняется огромное количество бинарных данных -- и никогда я не видел ни первое, ни второе.
Размер базы растет не экспоненциально (как Вы это себе вообще представляете????), доступ вообще никак не страдает (если правильно построены индексы).

Date: 2008-05-01 10:39 am (UTC)
From: [identity profile] langsamer.livejournal.com
Саш (ничего, что я на "ты", все таки в БадКиссингене неделю назад встречались :)), у меня опыт разработки на аксессе суммарно тянет лет на 5, при этом полтора года я разрабатывал именно проект с хранением бинарных данных (gif, jpg). Так вот я его переделывал именно из схемы с хранением всего внутри файла в схему с внешним хранением - из-за производительности.
(отошел, подумал) Возможно, в MSA2003 это поправили, но в 2000 с хранением бинарных данных все выглядело не лучшим образом.

Date: 2008-05-01 11:41 am (UTC)
From: [identity profile] alauxdo.livejournal.com
Привет!
(на "ты" намного проще) Возможно ты прав с MSA2003, как я писал выше, у нас 12 000 картинок в базе, проблем с производительностью нет. Единственно что -- мы эти картинки вообще не удаляем, то есть базу сжимать не приходится вообще -- и соответственно не нужно перестраивать индексы и прочее.

Date: 2008-04-30 12:25 pm (UTC)
From: [identity profile] jorr.livejournal.com
Можно, при желании, и переформатировать в какой-нибудь нормальный формат.
А потом уже интегрировать.
НО при приличных объёмах вставляемых кусков - это совершенно нерентабельно по усилиям.

Date: 2008-05-01 07:38 am (UTC)
From: [identity profile] alauxdo.livejournal.com
Не верьте: у нас в базе сохраняются правда не PDF-файлы, а картинки продуктов, что мы продаем, в формате JPEG, сейчас порядка 12 000 картинок так сохранено, никаких проблем ни с быстродействием, ни с размером базы. Надо только руководствоваться следующими принципами:
1) таблицу, где хранятся бинарные данные, лучше разместить в отдельной mdb, в основной базе создать лишь ссылку на эту таблицу.
2) в этот же mdb лучше не помещать таблицы, которые часто обновляются и (самое главное!) из которых часто удаляются данные - таким образом не нужно будет проводить сжатие базы.

Могу прислать один небольшой проект (база данных знатоков игры ЧтоГдеКогда), где я сохраняю в базе фотографии знатоков, а также динамически достаю их оттуда (для отображения в формуляре). Сохранение файла любого другого типа принципиально ничем не отличается.

P.S.: Надо просто все грамотно делать -- Аксес, в отличие от других офисных программ, это все-таки среда разработки, а не офисный пакет, и его надо изучать по книгам и руководствам, а не по принципу "а, базы данных я знаю чуть-чуть, и тут разберусь".