powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Загрузка файла через Excel в БД Access в поле "Вложения"
8 сообщений из 8, страница 1 из 1
Загрузка файла через Excel в БД Access в поле "Вложения"
    #40045228
Tidus1988
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день,

Имеется код VBA отправляющий данные из формы Excel в БД Access в соответствующие поля, в БД имеется поле "File" с типом "вложение" позволяющее сохранить файлы к соответствующей записи. Подскажите процедуру для загрузки файла, при условии, что известен путь расположения файла (например C:\File.pdf), данный файл так же создается через Excel, путем печати необходимых листов книги.

Код VBA
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Public Sub InsertFromExcel()
    Const strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Temp\REConclusion.accdb;Persist Security Info=True;Jet OLEDB:Database Password=123"
    Dim sSQL As String
    Dim pConn As New ADODB.Connection, pSheet As Worksheet, lRow As Long
    Set pSheet = ThisWorkbook.Worksheets("Пример")
    lRow = pSheet.Cells(pSheet.Rows.Count, 2).End(xlUp).Row
     
    sSQL = "Insert Into Test (DateBD, NumberBD, TextMoreThan510, Quantity, CheckEmptyData) Select [Поле менее 510 знаков в ячейке (Дата)]"
    sSQL = sSQL & ",[Поле менее 510 знаков в ячейке (Число)],[Поле более 510 знаков в ячейке (Текст)]"
    sSQL = sSQL & ",[Количество знаков ячеек в столбце E],[Проверка если данных в ячееке нет] From "
    sSQL = sSQL & "[Excel 12.0;Database=" & ThisWorkbook.FullName & ";HDR=Yes].[Пример$B2:G" & lRow & "] Where [Проверка если данных в ячееке нет] Is Not Null;"
    pConn.Open strConn
    pConn.Execute sSQL
    pConn.Close
End Sub



В справке Microsoft нашел статью не отменяющую необходимый функционал: Вложение файлов и изображений в записи базы данных

Вложение файловВложение файлов в записи путем программирования
Access позволяет использовать модель объектов и интерфейсы программирования для вложения файлов в записи программным путем с помощью кода VBA (Visual Basic для приложений). Дополнительные сведения см. в статьях "LoadFromFile" и "SaveToFile" на веб-сайте MSDN https://msdn.microsoft.com.

Я знаю про ограничения размера базы в 2 Гб и ограничения загружаемого файла в 256 Мб, просто есть определённая специфика, согласно которой необходимо небольшого размера файл сохранять именно в генерируемой через Excel строке БД Access. Текущих знаний SQL мне явно не хватит на реализацию собственными силами.
...
Рейтинг: 0 / 0
Загрузка файла через Excel в БД Access в поле "Вложения"
    #40045235
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tidus1988,
Не совсем понимаю что Вы подразумеваете под термином "загрузить",но смутно предполагаю что связывание может решить Вашу проблему
А вообще что есть такого чего нельзя сделать в ACCESS,а можно только в EXCEL-зачем для решения,как я понимаю вполне выполнимой в ACCESS задачи, использовать EXCEL.
...
Рейтинг: 0 / 0
Загрузка файла через Excel в БД Access в поле "Вложения"
    #40045236
Tidus1988
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdku
Tidus1988,
Не совсем понимаю что Вы подразумеваете под термином "загрузить",но смутно предполагаю что связывание может решить Вашу проблему


Вложить файл в поле БД Access с типом "Вложение", автоматически после генерации записи в БД через файл Excel, который является шаблоном со сложными математическими вычислениями и отправляет результаты в БД Access. Потому что для пользователя это должна быть единая процедура, он по результатам своей работы в файле Excel генерирует соответствующее заключение в формате pdf, вот его и нужно загрузить в генерируемую пользователем строку в БД Access, помимо данных, которые уже загружаются.
...
Рейтинг: 0 / 0
Загрузка файла через Excel в БД Access в поле "Вложения"
    #40045241
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tidus1988,

Вы чуть чуть не дожали процедуру, она стандартная и есть в рекомендациях майкрософт.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
'  Instantiate the parent recordset.  
Set rsEmployees = db.OpenRecordset("Employees") 

'… Code to move to desired employee 

' Activate edit mode. 
rsEmployees.Edit 

' Instantiate the child recordset. 
Set rsPictures = rsEmployees.Fields("Pictures").Value  

' Add a new attachment. 
rsPictures.AddNew 
rsPictures.Fields("FileData").LoadFromFile "EmpPhoto39392.jpg" 
rsPictures.Update 

' Update the parent record 
rsEmployees.Update 



Вам просто нужно из экселя открыть целевую базу аксесс программно и вставить нужный файл excel (подозреваю что это текущий файл в котором вы работаете) в новую строку.

Сможете сами дописать три строки кода в Excel в дополнение к вышеуказанному коду?)
...
Рейтинг: 0 / 0
Загрузка файла через Excel в БД Access в поле "Вложения"
    #40045253
Tidus1988
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сергей Лалов
Сможете сами дописать три строки кода в Excel в дополнение к вышеуказанному коду?)


Если Вас не затруднит, напишите пожалуйста как, так как я пытался это реализовать, но выпадало в ошибки.
...
Рейтинг: 0 / 0
Загрузка файла через Excel в БД Access в поле "Вложения"
    #40045295
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tidus1988,


Вот полностью рабочий код, у меня выполняется на нажатие кнопки в Excel:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
Private Sub CommandButton1_Click()

On Error GoTo err_description
strAccessPathAndName = "C:\Users\SL\Desktop\db_test.accdb" ' ПУТЬ ДО ВАШЕЙ БАЗЫ
strExcelPathAndName = "C:\Users\SL\Desktop\test.xlsx" ' ПУТЬ ДО ЛЮБОГО ФАЙЛА КОТОРЫЙ НУЖНО ПОМЕСТИТЬ
strTableName = "t_test" ' имя таблицы в базе
strFieldName = "files" ' имя поля вставки


Dim acsApp As Access.Application
    Set acsApp = New Access.Application
acsApp.OpenCurrentDatabase strAccessPathAndName
  ' acsApp.Visible = True
Set Db = CurrentDb
   Set rsMain = Db.OpenRecordset(strTableName)
   rsMain.AddNew
   rsMain.Update
   rsMain.MoveLast
   rsMain.Edit
   Set rsAttach = rsMain.Fields(strFieldName).Value
   rsAttach.AddNew
   rsAttach.Fields("FileData").LoadFromFile strExcelPathAndName
   rsAttach.Update
   rsMain.Update
   Set rsMain = Db.OpenRecordset(strTableName)
   Set rsAttach = rsMain.Fields(strFieldName).Value
   'While Not rsAttach.EOF ' оставить потомкам - потому что кроме хранения в поле типа вложение,можно еще оставить связь по ссылке
    '  rsAttach.Fields("FileData").SaveToFile _
    '              "C:\путь_к_вашей_папке_если_хотите_хранить связь"
    '  rsAttach.MoveNext
  ' Wend
  MsgBox "Поздравляем, вставка осуществилась!", vbInformation

Exit Sub
err_description: MsgBox Err.Description
End Sub



Обязательно в Excel подключите библиотеку Access (не через связывание ,а именно с подключением библы как указано на рисунке):
...
Рейтинг: 0 / 0
Загрузка файла через Excel в БД Access в поле "Вложения"
    #40045296
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Написал код авансом в счет будущей помощи на planetaexcel.ru От собратьев по разуму. Смотрю вы там с этой задачей бьетесь неделю.
...
Рейтинг: 0 / 0
Загрузка файла через Excel в БД Access в поле "Вложения"
    #40045324
Tidus1988
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сергей Лалов,

Благодарю за помощь.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Загрузка файла через Excel в БД Access в поле "Вложения"
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]