我有一个Access表,其中每个项目都附加了一个Visio文件(.vsd)。
在我的Access表单中,我想看到该文件。我不在乎它是一个可编辑的Visio文件,一个预览或只是一个图像。
一世 …
您不想使用“附件”功能。它的目的与你所尝试的不同。
将图像放入数据库外部的独立文件夹中。
在包含主表单记录的表中 - 您需要一个新字段来保存路径&图像文件名。这是一个文本字段。 (如果路径段是统一的,那么所有人都可以通过代码插入其他地方而不是将其存储在此字段中。)
然后在表单设计中 - 使用图像控件。此控件(所有控件)都有一个source属性 - 将使用保存路径的字段随每个记录而变化。文件名。
对每个记录更改图像的主题做一个bing / google - 设置不一定是直观的。请注意,较旧版本的操作方式不同,因此请确保您获得相对较新的建议。
然后,当您使用表单并更改记录时 - 图像将会更改。
键入所有这些后注意....我不知道visio文件类型是否有效 - 我知道jpg和bmp做...所以首先完整性检查一个简单的固定图像与该文件类型,看看它是否有效.. 。
由于Access中的附件字段不是很一致,因此直接将它们加载到OLE对象中是不可取的,除非您愿意做复杂的事情
可以找到关于附件的微软文档 这里
我对附件的观察:二进制数据字段包含以下内容之一:
据我所知,微软已经为我们提供了一种将原始文件保存到磁盘的方法,但是没有为我们提供从实际文件数据中删除这些初始字符和文件类型的方法,或者简单的方法识别文件是否被压缩(您可以使用链接中提供的表检查文件类型以检查它是否应该)。
总之,您可能最好用数据库中的OLE对象替换附件字段,或者在显示附件文件之前将附件文件写入磁盘。
如果您使用OLE对象字段,并将其加载为长二进制数据(而不是通过GUI),您可以轻松实现您在不将文件写入磁盘时所寻找的行为,因为二进制数据可用而没有任何额外字符。
要将附件文件写入磁盘:
Dim rsForm As DAO.Recordset2 Dim rsFiles As DAO.Recordset2 Set rsForm = Me.Recordset Set rsFiles = rsForm.Fields("attachment_column").Value If Not rsFiles.EOF Then Dim fileLocation As String fileLocation = Environ("TEMP") & rsFiles.Fields("FileName").Value rsFiles.Fields("FileData").SaveToFile fileLocation 'Your existing code to display the OLE object here End If