Сохранить отчет о доступе в формате PDF / Binary - PullRequest
3 голосов
/ 09 июня 2009

Я использую клиентский интерфейс Access 2007 (VBA - adp) с серверным сервером SQL Server 2005. У меня есть отчет о том, что я хочу сохранить копию в формате PDF в виде двоичного файла на сервере SQL.

  1. Отчет открыт
  2. Отчет закрыт - Закрытое событие вызвано
  3. Отчет сохранен в формате PDF и загружен в таблицу SQL Server в виде двоичного файла

Возможно ли это и как мне этого добиться?

Ответы [ 2 ]

4 голосов
/ 09 июня 2009

Существуют разные мнения, стоит ли хранить двоичные файлы в таблицах базы данных или нет. Некоторые говорят, что все в порядке, некоторые предпочитают сохранять файлы в файловой системе и хранить только местоположение файла в БД.

Я один из тех, кто говорит, что все в порядке - у нас есть база данных SQL Server 2005> 440 ГБ, в которой мы храним файлы PDF и изображения. Он работает отлично, и у нас нет проблем с ним (например, со скоростью ... это, как правило, один из главных аргументов "файловой системы").

Если вы не знаете, как сохранить файлы в базе данных, Google «GetChunk» и «AppendChunk», и вы найдете примеры, такие как этот .

Относительно дизайна базы данных:
Лучше всего создать две таблицы: одну только с идентификатором и полем большого двоичного объекта (в котором хранятся файлы PDF), а другую - с идентификатором и дополнительными полями для фильтрации.
Если вы сделаете это таким образом, весь поиск и фильтрация будут происходить на маленькой таблице, и только когда вы знаете идентификатор файла, который вы хотите загрузить, вы попадаете на большую таблицу ровно один раз и загружаете файл.
Мы делаем это так и, как я уже говорил, база данных содержит почти 450 ГБ файлов, и у нас вообще нет проблем со скоростью.

1 голос
/ 09 июня 2009

Самый простой способ сделать это - сохранить отчет на диск в формате PDF (если вы не знаете, как это сделать, я рекомендую эту ветку на форумах MSDN). После этого вам нужно будет использовать ADO для импорта файла с использованием OLE-встраивания в поле двоичного типа. Я в этом не разбираюсь, поэтому не могу дать подробностей, но поиск в Google пока что ненадежен.

Я бы рекомендовал не хранить PDF-файлы в базах данных Access - у Jet есть строгое ограничение на размер базы данных, и PDF-файлы могут заполнить это ограничение, если вы не будете осторожны. Лучше всего использовать OLE-ссылку на файл и извлекать его с диска каждый раз, когда пользователь запрашивает его.

Последний совет - использовать ObjectFrame для отображения PDF на диске, который MSDN очень хорошо охватывает здесь .

...