Помогите записать картинку в базу

HVV83_Vladimir

Ув. форумчане, помогите написать программу учета входных писем, т.е. отсканированное письмо необходимо записать в базу и добавить к нему некоторую информацию.Хочу сделать кнопку, которая вызовет диалоговое окно для выбора нужного *.JPEG файла и сохранит эту картинку в базу, из вышесказанного нашел только то, что картинку необходимо сохранять в поле OLE.
24 ответа

HVV83_Vladimir

HVV83_Vladimir,нисколько не критикуя подход, можно выяснить версию аксеса? и периодчность добавления картинов+размер их средний?


HVV83_Vladimir

Озверин,1)версия аксеса - Access 2003 2)периодичность - примерно 20 картинок в месяц3)размер картинки - в среднем 1Мб


HVV83_Vladimir

думаю, более чем исчерпывающий ответ тут http://am.rusimport.ru/MsAccess/topic.aspx?ID=271прикиньте размер вашей бд с остальными данными через месяц, а потом через и решите, требуется хранить изображения непосредственно в бд иил нет


HVV83_Vladimir

вот пытаюсь разобраться с исходниками одного из вариантов хранения картинок в следующей строчке выдает ошибку
Dim objFSO As FileSystemObject
может надо какуюто библиотеку включить


HVV83_Vladimir

вот пытаюсь разобраться с исходниками одного из вариантов хранения картинок в следующей строчке выдает ошибку
Dim objFSO As FileSystemObject
может надо какуюто библиотеку включить
надо,...\system32\scrrun.dllили пользуйтесь поздним связыванием


HVV83_Vladimir

или пользуйтесь поздним связыванием
а примерчик такого типа не подскажете где найти?


HVV83_Vladimir


HVV83_Vladimir

а примерчик такого типа не подскажете где найти?
имелось ввиду, делать не так
Dim objFSO As FileSystemObject
Set objFSO = New FileSystemObject
а так
Dim objFSO As Object ' FileSystemObject
Set objFSO = CreateObject("Scripting.FileSystemObject")
во втором случае, ссылка на библиотеку, в референсах - не нужна


HVV83_Vladimir

Озверин,Хранить картинке в БД можно, если таблицы на SQL-server.


HVV83_Vladimir

Немного перефразирую свой вопрос,Хочу сделать кнопку, которая вызовет диалоговое окно для выбора нужного *.JPEG файла и сохранит путь к ней в переменной. С чужими исходниками разбираюсь с трудом, свои писать некогда, вот нашел отрывок кода, но похоже что FileDialog - это не встроенная функция
Private Sub btnAddPick_Click()
 With Application.FileDialog(msoFileDialogFilePicker)
 .AllowMultiSelect = False
 .InitialView = msoFileDialogViewDetails
 .InitialFileName = "С:\"
 .Title = "Выберите файл"
 .ButtonName = "Выбрать"
 .Filters.Clear
 .Filters.Add "Файлы jpeg, jpg", "*.jpeg;*.jpg"
 .Show
 Me("путь") = .SelectedItems.Item(<b>1</b>)
 End With
End Sub
здесь выдает ошибку ""FileDialog" failed"


HVV83_Vladimir

HVV83_Vladimir,1) "здесь" это где?2) Option Explicit в модуле присутствует?3) Ссылка на библиотеку типов "Microsoft Office x.y Object Library" в диалоге References сделана?alvk,хранить картинки можно в любой сколь-нибудь современной БД.


HVV83_Vladimir

HVV83_Vladimir,1) "здесь" это где?2) Option Explicit в модуле присутствует?3) Ссылка на библиотеку типов "Microsoft Office x.y Object Library" в диалоге References сделана?alvk,хранить картинки можно в любой сколь-нибудь современной БД.
1)в предыдущем сообщении2)уже присутствует, до этого небыло3)ссылка была сделасейчас выдает уже другую ошибку что переменная msoFileDialogFilePicker не определена


HVV83_Vladimir

...3)ссылка была сделасейчас выдает уже другую ошибку что переменная msoFileDialogFilePicker не определена
врёте (это уже другая библиотека и другая ссылка)или числовым значением пользуйтесь
Const msoFileDialogFilePicker = 3 Member of Office.MsoFileDialogType


HVV83_Vladimir

1)в предыдущем сообщении
"-Где мы? -На воздушном шаре!"Ошибка происходит на конкретном операторе, и имеет некий номер.
3)ссылка была сделасейчас выдает уже другую ошибку что переменная msoFileDialogFilePicker не определена
Значит, не ту библиотеку подключили, проверьте ещё раз название.


HVV83_Vladimir

хранить картинки можно в любой сколь-нибудь современной БД.
Акцесс 2003 - предел 2 гига.


HVV83_Vladimir

"-Где мы? -На воздушном шаре!"Ошибка происходит на конкретном операторе, и имеет некий номер.Значит, не ту библиотеку подключили, проверьте ещё раз название.
ошибка без номера, а библиотека точно подключена с C:\Windows\System32\scrrun.dll


HVV83_Vladimir

ошибка без номера
Ошибка стала без номера, когда стала определяться на этапе компиляции, после включения в модуль строки Option Explicit. До этого она была в run-time, и с номером. Так или иначе она была на конкретном операторе.
а библиотека точно подключена с C:\Windows\System32\scrrun.dll
scrrun.dll это Microsoft Scripting Runtime. Подключите Microsoft Office 11.0 Object Library.


HVV83_Vladimir

alvk,каким образом ограничение на размер .mdb-файла влияет на способность хранения изображения в базе данных? Намекаете, что часто попадаются изображения размером более 2 Гб?


HVV83_Vladimir

Бенедикт,А там что, одно(1) изображение? Я могу гарантировать, что, при достижении mdb предела в 2 гига, он начинает сыпаться, лично проверил. Если брать в расчёт, что одна картинка весит 5 - 20 мег (пользователи не умеют нормально сохранять отсканированное и сжатие типа jpeg(не путать с форматом) в Acdsee им неведомо), то посчитайте количество записей в таблице, при котором наступит кердык. Около 200-400. При хорошем раскладе - 800.


HVV83_Vladimir

Бенедикт,подключение библиотеки помогло


HVV83_Vladimir

А там что, одно(1) изображение?
Во-во.
Я могу гарантировать, что, при достижении mdb предела в 2 гига, он начинает сыпаться, лично проверил.
Это написано в спецификации MS Access. Но нигде не написано, что БД - это один-единственный файл.
Если брать в расчёт, что одна картинка весит 5 - 20 мег (пользователи не умеют нормально сохранять отсканированное и сжатие типа jpeg(не путать с форматом) в Acdsee им неведомо),
Не понял фразу. 5-20 мег - это очень много, надо сжимать. Если пользователь низкоквалифицированный, предоставлять ему средства перемасштабирования и конвертации в сжатый формат при импорте в БД, и хранить в сжатом формате (не в виде OLE-объектов).
то посчитайте количество записей в таблице, при котором наступит кердык. Около 200-400. При хорошем раскладе - 800.
Зачем мне это считать? Вот у меня есть простая БД - каталог продукции с фотографиями в JPEG (вписываются в прямоугольник 1024*768), около 20000 товарных позиций, влазит в один .mdb. Надо будет больше - будет больше. Но, возможно, не в одном .mdb.


HVV83_Vladimir

Бенедикт,Вы частность, а я говорю об общем. Всё что выше редко и врядли где реализовывается.Что касается не OLE - а в чём? SQL не предлагать!


HVV83_Vladimir

Вы частность, а я говорю об общем.
Не надо передёргивать. В частности свалились Вы, я Вам ответил примером.
Всё что выше редко и врядли где реализовывается.[quot alvk]Вы вольны верить во что хотите.[quot alvk]Что касается не OLE - а в чём? SQL не предлагать!
OLE - это технология, SQL - это язык."Предлагаю" хранить изображения в "родном" формате (JPEG, GIF, PNG, TIFF) в длинных двоичных полях таблиц. В конструкторе таблиц поле такого типа имеет сбивающее с толку название "Поле объекта OLE", позволяет хранить до 1 Гб любой двоичной информации (переменной длины). Примеры можете найти по моему профилю.


HVV83_Vladimir

Правка:
Вы частность, а я говорю об общем.
Не надо передёргивать. В частности свалились Вы, я Вам ответил примером.
Всё что выше редко и врядли где реализовывается.
Вы вольны верить во что хотите.
Что касается не OLE - а в чём? SQL не предлагать!
OLE - это технология, SQL - это язык."Предлагаю" хранить изображения в "родном" формате (JPEG, GIF, PNG, TIFF) в длинных двоичных полях таблиц. В конструкторе таблиц поле такого типа имеет сбивающее с толку название "Поле объекта OLE", позволяет хранить до 1 Гб любой двоичной информации (переменной длины). Примеры можете найти по моему профилю.