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

使用VBA将大量附件导入Microsoft Access,vba,image,ms-access,attachment,Vba,Image,Ms Access,Attachment,我正在尝试将大量图像(~1000)附加到Microsoft Access中。 我认为使用VBA自动完成任务比手动完成任务更明智 我不想将超链接、路径或OLE链接到文件的位置,这样会降低数据库的文件大小。(编辑:据了解,Ms Access有2Gb的限制,我想在假设不会超过2Gb限制的情况下继续讨论。) 我想在其中执行所有这些操作的数据库名为“database1”。我要将图像导入的表名为“Table1”。 到目前为止,该表共有3列: 1) 自动生成的ID,我保持原样 2) 标题为“文件名”的列,当前

我正在尝试将大量图像(~1000)附加到Microsoft Access中。 我认为使用VBA自动完成任务比手动完成任务更明智

我不想将超链接、路径或OLE链接到文件的位置,这样会降低数据库的文件大小。(编辑:据了解,Ms Access有2Gb的限制,我想在假设不会超过2Gb限制的情况下继续讨论。)

我想在其中执行所有这些操作的数据库名为“database1”。我要将图像导入的表名为“Table1”。 到目前为止,该表共有3列:

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

2) 标题为“文件名”的列,当前为“image1”、“image2”、“image3”等。或者,我可以将此列中的条目更改为我计算机上文件的路径(例如C:\Users\Username\Documents\image1.jpg)。我已经用一个.bat文件生成了一个列表,列出了我计算机上所有图像的路径,并将其转换成一个.txt文件,名为“文件路径”

3) 标题为“附件_列”的列。这是我希望将图像放入数据库中的列

如果可能的话,我希望图像按照第2列中的文件名导入到相应的数据库条目中

我一直在看各种文件,并尝试了他们没有任何运气。

我壁橱里的东西如下所示。但是我不知道如何在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
感谢您的高级指导。

试试这个:

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
有很多种方法可以一行一行地通过,但我喜欢这一种


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

请指定:是希望所有图像都在一个记录中,还是希望每个图像都有单独的记录。请共享您的
文件\u paths.txt
文件的结构。请注意,Access对每个数据库的大小有2GB的限制,因此根据图片的大小,您可能无法实现此限制。我希望每个记录(数据库表中的行)有一个单独的图像,我知道每个记录可以有多个附件,但现在请忽略这一点。文件\u path.txt的字面意思如下:C:\Users\Username\Documents\images\image1.jpg C:\Users\Username\Documents\images\images\images\image3.jpg C:\Users\Username\Documents\images\images\image4.jpg等我知道Ms Access根据文档有2Gb的限制(因此所有关于OLE的建议),我不会超过这个限制。我会在不超过这个标准的前提下行事。后期编辑。新行是分隔的还是空格分隔的(我知道你不能在注释中插入行)?对不起,我不理解“分隔”的编码。如果这是关于.txt文件的文件路径,那么它在.txt文件中有自己的行。啊,这很清楚。我很快就会回答。有关分隔符的定义,请参见。因此,您的文本文件是新行分隔的(不同的字段之间用新行分隔)。我得到一个错误“运行时错误”21542:在此集合中找不到项。对于底部的第7行。“rsPictures.fields”(“attachment_column”).LoadFromFile textRow”我还在代码顶部添加了“Sub Macro1()”和“End Sub”在VB代码编辑器中。目前,在我的数据库的第二列中,我列出了我要附加的相应图像的完整文件路径。请参阅编辑。修好了。请注意,由于相同的错误,您的示例也无法添加单个文件。我从上面编辑的代码行“Set rsEmployees=db.OpenRecordset(“Table1”,dbOpenDynaset)”中得到另一个错误“无法启动事务;嵌套的事务太多。(错误3003)”。另一方面,“rsEmployees”和“rsPictures”只是我在代码中使用的任意术语,它不应该影响我认为的代码,那么我们必须降低一点效率,一次插入一条记录。再次编辑。现在事情变得有趣了。运行代码后,对数据库进行了一些更改。只有一个新行添加到表1的底部,带有一个新的AutoID(#21),并添加了image3.jpg。再次运行宏将仅在新行上添加image3.jpg,且autoID为24(是我在文件_path.txt中的行数的倍数)。