|
Бинарное содержимое JPG, Gif файла в бинарном поле базы данных
Хранение бинарного содержимого JPG, Gif, Wmf файла в бинарном поле базы данных.
исправлено маштабирование первого рисунка в отчете
исправлены некоторые проблемы с wmf форматом в отчетах
В связи с тем что данный способ потребовал много программного кода - мною был сделан специальный ActiveX контрол
ActiveX контрол подходит для:
отображения картинок в обычных формах (не ленточных и не табличных)
отчетах
Особенности данного способа:
экономия на сжатых файлах - порядка 15 раз !!! в отличие от других способов хранения изображений в БД
данные хранятся в базе данных, а не на диске
Для добавления контрола к себе на форму:
Вставка -> Элемент ActiveX -> AlexeyK_DB16.Picture1
Если в списке ActiveX нет такого контрола:
загрузите и запустите демонстрационный проект
или отдельно OCX файл и зарегистрируйте его из командной строки: Regsvr32.exe AK_DBPIC16.ocx
Для отображения картинки:
указать ActiveX контролу, внедренному на форму, свойство Datasource - имя поля формы, в котором содержится бинарный образ графического файла
(тип поля OLE для MDB или Image для ADP)
Далее: Me.Picture12 - АктивX контрол на форме
Методы контрола:
Загрузка из графического файла в базу данных
Me.Picture12.LoadFromFile (ИмяФайлаИзКоторогоБудетЗарруженаКартинка)
Очистка картинки и данных в записи
Call Me.Picture12.ClearPicture
Сохранение картинки из БД на диск
Me.Picture12.SaveToFile (InputBox("введите имя файла для сохранения", , "c:\output"))
Свойства контрола:
Вместить картинку в рамку, сохраняя пропорции начального графического файла
Me.Picture12.Streth = True
Загрузить небходимые файлы:
Демонстрационная MDB и RAR - Содержат установочную программу для OCX
Демонстрационный проект MDB (352 Кб)
Демонстрационный проект RAR(76 Кб)
Отдельно ОCX файл (48 Кб)
Внимание! все примеры будут корректно работать только при установленных
последних версиях сервис - паков операционной системы и драйверов доступа к данным
Интересные фрагменты из этого примера:
выгрузка файла любого типа из таблицы на диск
RS - Рекордсет подключенный к таблице с файлами
RS("filebinary") - поле рекордсета в котором хранится содержимое файла
RS("filename") - поле рекордсета в котором хранится имя файла
Dim Filedata() As Byte, filename
filename = RS("filename")
ReDim Filedata(Len(RS("filebinary")) - 1)
Filedata() = RS("filebinary")
Open filename For Binary Access Write As #1
Put #1, , Filedata()
Close #1
перекладывание из рекордсета в массив - обязательно!
Загрузка файла в таблицу
Public Sub Loadlib2db(filename As String)
'Это загрузка бинарных файлов в DB, в случае с референсами нужно заполнить остальные поля в таблице MSysLibFiles
Dim RS As New ADODB.Recordset
Dim m_value
'загрузка в массив
Dim Filedata() As Byte
ReDim Filedata(FileLen(filename) - 1)
Open filename For Binary Access Read As #1
Get #1, , Filedata()
Close #1
'загрузка в Таблицу
m_value = Filedata()
RS.Open "select * from MSysLibFiles where id = 0", CurrentProject.Connection, adOpenDynamic, adLockOptimistic
RS.AddNew
RS("filebinary") = m_value
RS.Update
RS.Close
Set RS = Nothing
End Sub
| |