Как вставить картинку в аксессе
Работа с изображениями в Microsoft Access (97, 2000, 2003)
Возникла задача хранения (загрузка, отображение) картинок (фотографий и т.п.) в базе данных Access.
На первый взгляд опытного программиста 😉 нет ничего проще — картинки храним в поле таблицы с типом Поле объекта OLE (OLE Object), а отображаем на формах при помощи элемента управления Присоединенная рамка объекта, ну или если потребуется Свободная рамка объекта (Bound Object Frame, Unbound Object Frame). Но не тут-то было!; Оказалось, что если данные записать напрямую (в коде Visual Basic), например, используя метод AppendChunk, в поле с типом Поле объекта OLE, то в элементе управления Присоединенная рамка объекта изображение вот так вот просто не отображается. Отображается же оно только в том случае, если загрузить данные в это поле при помощи контекстного меню самого поля или указанного элемента управления, выбрав правильный тип OLE объекта (что-нибудь типа Рисунок, Picture. ). Такая гибкость и умность обработки данных не особо устраивала.
А элемент управления с манящим типом Рисунок (Image) предназначен для работы исключительно со статическими изображениями: на этапе дизайна (ну, в общем-то, и из кода Visual Basic) можно указать файл на диске, который будет отображаться на форме.
Изучив БД примеров — Northwind в английской версии, Борей в русской — и изрядно просканировав интернет, стало понятно, что отсутствие нормальной работы с изображениями в Access’е — общепризнанный факт. Вариантов предлагается два:
1. Хранение картинок в виде файлов на диске, а пути к ним — в БД. Отображение на форме при помощи элемента управления Рисунок (Image), присваивая путь в качестве значения свойству Рисунок (Picture).
2. Хранение картинок в БД в полях Поле объекта OLE (OLE Object). Аналогичное отображение на форме при помощи элемента управления Рисунок (Image). При этом для загрузки файла используется метод AppendChunk, а чтобы отобразить картинку данные выгружаются во временный файл методом GetChunk, путь к полученному файлу присваивается свойству Рисунок (Picture) элемента управления. Этот метод дан с примером здесь.
Минус первого метода в том, что при перемещении каталога хранения файлов должны быть в обязательном порядке корректно изменены пути к файлам, сохраненные в БД. Минусы второго метода — нужно придумать как добиться уникальности имени временного файла (так как теоретически с БД могут работать несколько пользователей «из одного и того же места»), и прямая работа с файлами на диске всё-таки замедляет работу. И оба этих метода не подходят для использования в Ленточной форме (Continuous Forms), а только в Одиночной форме (Single Form).
Уже склонившись ко 2-ому варианту, как более приемлемому, промелькнула мысль — а не попробовать ли использовать элемент управления Рисунок (Image) не только для отображения, но и для преобразования данных в нужный графический формат, использовав свойство PictureData объекта Image?! И это сработало! Не нужны никакие временные файлы (хотя, конечно для Ленточной формы это всё равно не подходит, но это и не критично).
Итак, идея в том, что загрузка файла осуществляется присвоением пути к нему свойству Picture элемента управления Рисунок (Image), и последующим считыванием данных из свойства PictureData — таким образом мы добиваемся, что данные буду сохранены в формате, который Access гарантированно отобразит. А отображение картинки выполняется считыванием данных из поля с типом Поле объекта OLE (OLE Object) и их присвоением свойству PictureData элемента управления.
Пример.
Пусть у нас в таблице MyTable есть поле MyImage типа Поле объекта OLE (OLE Object). На форме MyForm нам нужен элемент управления Рисунок (Image) — MyPic. При этом, чтобы разместить этот элемент управления на форме, нужно обязательно выбрать рисунок, а потом в дизайнере в свойстве Рисунок (Picture) указать (отсутствует) ((none)) — со скобками. На вопрос об удалении рисунка — ответить утвердительно.
Загрузку можно выполнить примерно так:
‘====================================================
Dim rs As Recordset
Dim dlgFile As FileDialog, strFilePath As String
Добавление фонового рисунка в формы Access
Добавление фонового рисунка в формы Access
Для добавления в форму Access фонового рисунка, например в главную кнопочную форму, необходимо запустить базу данных («Успеваемость студентов» с главной кнопочной формой) и на панели инструментов щелкнуть на кнопке Окно базы данных. Откроется Окно базы данных Access, в котором откройте кнопочную форму Access в режиме Конструктор.
Чтобы добавить фоновый рисунок в форму Access необходимо открыть диалоговое окно Свойства кнопочной формы, которое можно открыть несколькими способами. Рассмотрим один из способов: откройте окно Свойства, щелкнув правой кнопкой мыши на кнопочной форме, и в контекстном меню выберите команду Свойства. Откроется окно Рисунок: Picture на вкладке Макет.
Для ввода пути и имени рисунка требуется щелкнуть на кнопке обзора , откроется окно диалога Выбор рисунка. В этом окне надо указать имя и тип файла. По умолчанию Microsoft Office Access поддерживает форматы файлов .bmp, .dib, .wmf, .emf и .ico. Поэтому выберите рисунок с одним из указанных расширений и щелкните на кнопке ОК в окне диалога Выбор рисунка. Я выбрал расширение рисунка -.bmp.
Далее в окне Рисунок: Picture укажите тип рисунка, он может быть внедренным или связанным. Основные различия между связыванием и внедрением (встраиванием) заключаются в месте хранения данных и способе обновления данных после помещения их в документ. Внедренный рисунок является неотъемлемой частью формы Access, т.е. будет храниться в базе данных, увеличивая ее объем.
Связанный объект – это данные (объект), созданные в одном файле и вставленные в другой файл с поддержкой связи между файлами. Связанный объект не является частью файла, в который он вставлен, а хранится в исходном файле в одной из директорий ПК, не увеличивая объем базы данных. Если рисунок или логотип фирмы необходимо разместить на каждой форме и в отчетах, то в этом случае целесообразно вставлять рисунок в виде связанного объекта.
Я выбрал внедренный рисунок, так как он является неотъемлемой часть БД Access, что обеспечивает копирование (скачивание) файла БД с сайта пользователями Интернет.
Следующий шаг — это установка размеров рисунка. Масштабы рисунка имеют следующие значения:
- Фрагмент;
- Вписать в рамку;
- По размеру рамки.
В зависимости от цели выбирайте одно из значений. В кнопочной форме Access Успеваемость_студентов я выбрал масштаб рисунка — Фрагмент, выравнивание — По центру, результат представлен на рисунке
После закрытия окон «Рисунок: Picture» и «Кнопочная форма: форма», дважды щелкните на кнопке «Кнопочная форма», откроется следующая Главная кнопочная форма Access с фоновым рисунком.
Вставка рисунков, фотографий и логотипов в формы или отчеты помогает улучшить их внешний вид и придает индивидуальность базе данных Access.
Copyright
© Обучение в интернет, .
Обратная связь
Вставка рисунков(файлов) в Access
Как практически реализовывается вставка рисунков или файлов в Access 2003,
С возможностью их просмотра.
Буду благодарен за любую информацию.
Вставка рисунков(файлов) в Access
Добрый день всем участникам форума! Нид Хелп! Нужно прикрепить к записи картинки. Без ОЛЕ, без.
Вставка рисунков
Для добавления рисунка, изменяющегося в записях, есть в родном хэлпе 2003-го пошаговое описание.
Вывод по кнопке текстовых файлов и рисунков
Пишу курсовую, подскажите пожалуйста один момент, как сделать так чтобы при нажатии на кнопку.
Импорт офисных файлов в таблицы Access через VBA (БД почтовых файлов)
помогите пожалуйста как работать с файлам в Access. основные поля и форму сделал, таблицу тоже.
2003, я писал выше.
Для вставки рисунков в базу аксесс используется поле, тип поля OLE. Изначально в таблице ты создаешь это поле, которое будет связано с текущей записью, и при перелистывании записей будут менятся картинки. По типу привязки поле делится на внедренный и связанный рисунок. В одном случае у тебя данные хранятся по ссылке,в другом случае прямо в базе (причем размер ее распухает до нереальных размеров).
Вот здесь на форуме есть выдержка по твоему вопросу:
Хранение изображений в базе данных Access
В настоящее время есть 5 методов хранения информации в БД.
1) Хранение как объектов OLE.
Недостатки — большой обьем, необходимость установки набора соответствующих приложений.
Достоинство — простота использования
Пример: учебная база «Борей»
В начале используют все. Потом в зависимости от поставленных задач. И от количества и объема рисунков.
2) Хранение в двоичном формате DIB в поле объектов OLE.
Недостатки — большой обьем, необходимость писать дополнительный код для выполнения загрузки рисунков в БД (но код не слишком сложный, есть типовые наработки).
Достоинство — быстрота вывода рисунков.
Используется редко т.к. по сравнению с первым способом объем базы не уменьшается, а сложности при программировании растут.
3) Хранение в сжатом двоичном формате DIB в поле объектов OLE.
Недостатки — необходимо использовать или разрабатывать самому системы архивации данных, дополнительный код.
Достоинство — меньший объем БД по сравнению с двумя первыми способами.
Пример: sd_Foto.zip с использованием библиотеки zlib.dll. или sd_dbFoto3_97.zip
библиотека zlib.dll для Win2000 Pro и WinXP: zlib123dll.zip
4) Хранение файлов в формате JPG и GIF в поле объектов OLE и загрузка их в элемент управления Image (рисунок) через временный файл.
Недостатки — необходимо использовать временный файл для рагрузки рисунка, увеличение времени загрузки рисунка, дополнительный код.
Достоинство — меньший объем БД по сравнению с тремя первыми способами.
Пример: pictures.rar или sd_dbFoto4_97.zip
5) Хранение в базе данных путей к рисункам в формате JPG и GIF и загрузка их в элемент управления Image (рисунок).
Недостатки — необходимо следить за целостностью набора рисунков, увеличение времени загрузки рисунка, дополнительный код.
Достоинство — самый маленький объем БД по сравнению с четырьмя первыми способами.
Пример: sd_dbFoto5_97.ZIP
Для вставки рисунков в базу аксесс используется поле, тип поля OLE. Изначально в таблице ты создаешь это поле, которое будет связано с текущей записью, и при перелистывании записей будут менятся картинки. По типу привязки поле делится на внедренный и связанный рисунок. В одном случае у тебя данные хранятся по ссылке,в другом случае прямо в базе (причем размер ее распухает до нереальных размеров).
Вот здесь на форуме есть выдержка по твоему вопросу:
Хранение изображений в базе данных Access
В настоящее время есть 5 методов хранения информации в БД.
1) Хранение как объектов OLE.
Недостатки — большой обьем, необходимость установки набора соответствующих приложений.
Достоинство — простота использования
Пример: учебная база «Борей»
В начале используют все. Потом в зависимости от поставленных задач. И от количества и объема рисунков.
2) Хранение в двоичном формате DIB в поле объектов OLE.
Недостатки — большой обьем, необходимость писать дополнительный код для выполнения загрузки рисунков в БД (но код не слишком сложный, есть типовые наработки).
Достоинство — быстрота вывода рисунков.
Используется редко т.к. по сравнению с первым способом объем базы не уменьшается, а сложности при программировании растут.
3) Хранение в сжатом двоичном формате DIB в поле объектов OLE.
Недостатки — необходимо использовать или разрабатывать самому системы архивации данных, дополнительный код.
Достоинство — меньший объем БД по сравнению с двумя первыми способами.
Пример: sd_Foto.zip с использованием библиотеки zlib.dll. или sd_dbFoto3_97.zip
библиотека zlib.dll для Win2000 Pro и WinXP: zlib123dll.zip
4) Хранение файлов в формате JPG и GIF в поле объектов OLE и загрузка их в элемент управления Image (рисунок) через временный файл.
Недостатки — необходимо использовать временный файл для рагрузки рисунка, увеличение времени загрузки рисунка, дополнительный код.
Достоинство — меньший объем БД по сравнению с тремя первыми способами.
Пример: pictures.rar или sd_dbFoto4_97.zip
5) Хранение в базе данных путей к рисункам в формате JPG и GIF и загрузка их в элемент управления Image (рисунок).
Недостатки — необходимо следить за целостностью набора рисунков, увеличение времени загрузки рисунка, дополнительный код.
Достоинство — самый маленький объем БД по сравнению с четырьмя первыми способами.
Пример: sd_dbFoto5_97.ZIP
. слышен голос из прекрасного далекааа.
итак, подымаем тему тысячелетней давности.
Мне в какой то момент времени позарез понадобилось хранить рисунки,документы, фотографии в БД.
Долго смотрел, анализировал, решил графику и доки в БД не хранить. Организовал работу следующим образом:
При создании какой либо уникальной записи в БД, автоматически создается папка по определенному пути на файловом сервере. Открыть эту папку можно за дли секунды, нажав к примеру два раза на определенном поле. Таким образом БД не захламляется лишним объемом картинок и рисунков,документов итд. А ссылка при нажатии поля открывает папку на обычном файловом сервере по определенному пути. Я так думаю, что это во многом идеальный вариант.
При сетевой БД, имею в виду если база висит в интернете, наверное доступ документов организовать тоже через FTP сервер лучше. то есть при необходимости посмотреть документы, открывается папка на FTP сервере, в которой уже и лежат нужные картинки,доки, и все остальное.
Это мое мнение. Со всякими BLOBами и OLE я не копал дальше, после того как определил для себя оптимальный вариант.
detector