使用VBA将大量附件导入Microsoft Access

时间:2017-08-13 11:08:51

标签: vba image ms-access attachment

我试图将大量图像(~1000)附加到Microsoft Access中。 我认为使用VBA自动完成任务是明智的,而不是手动完成。

我不想将超链接或路径或OLE链接到文件的位置,这会使数据库的文件大小保持不变。 (编辑:据了解,Ms Ms的限制为2Gb,我希望在假设2Gb限制不会超过这种情况的情况下继续前进。)

我想要做的所有这些数据库名为" database1"。我要将图像导入的表格命名为" Table1"。 在此表中,到目前为止有3列:

1)自动生成的ID,我保留原样

2)标题为" file_name"的列,当前为" image1"," image2"," image3",或者,我可以将条目更改为此列中的文件路径(例如C:\ Users \ Username \ Documents \ image1.jpg)。我已经生成了所有图像的列表'我的计算机上使用.bat文件到.txt文件的路径,该文件名为" file_paths"。

3)标题为" attachment_column"的列。这是我希望将图像放入数据库的列。

如果可能的话,我希望将图像导入到相应的数据库条目中,如第2列中的file_name所示。

我一直在查看各种文档并试着没有任何运气。 https://msdn.microsoft.com/VBA/Access-VBA/articles/work-with-attachments-in-dao https://access-programmers.co.uk/forums/showthread.php?t=172939

我拥有的壁橱就像下面这样。但我无法弄清楚如何遍历file_paths.txt中的所有文件路径以附加所有图像。

Sub macrotest2()

   Dim db As DAO.Database
   Dim rs As DAO.Recordset
   Set db = CurrentDb 'I guess I don't have to define as database1 ?
   Set rsEMployees = db.OpenRecordset("Table1", dbOpenDynaset)

   rsEMployees.Edit

   Set rsPictures = rsEMployees.Fields("attachment_column").Value

   rsPictures.AddNew
   rsPictures.Fields("attachment_column").LoadFromFile "C:\Users\Username\Documents\image1.jpg"
'how to automate this to loop all the file paths in file_paths.txt?

   rsPictures.Update
   rsEMployees.Update
End Sub

先谢谢你。

1 个答案:

答案 0 :(得分:0)

试试这个:

Dim fileName As String, textRow As String, fileNo As Integer
fileName = "C:\file_paths.txt"
fileNo = FreeFile 'Get first free file number  
Dim i as Integer
Dim db As DAO.Database
Dim rsEmployees As DAO.Recordset, rsPictures AS DAO.Recordset
Set db = CurrentDb()
Open fileName For Input As #fileNo
Do While Not EOF(fileNo)
    i = i + 1
    Set rsEmployees = db.OpenRecordset("Table1", dbOpenDynaset)   
    rsEmployees.Edit
    rsEmployees.AddNew
    Line Input #fileNo, textRow
    rsEmployees.Fields("file_name").Value = textRow
    Set rsPictures = rsEmployees.Fields("attachment_column").Value
    rsPictures.AddNew
    rsPictures.Fields("FileData").LoadFromFile textRow
    rsPictures.Update
    rsPictures.Close
    rsEmployees.Update
    rsEmployees.Close
Loop
Close #fileNo
MsgBox i

有多种方法可以逐行浏览,但我喜欢这个。

请注意,文字文件中不能有空行。即使是最后一行也需要包含文件链接。